Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Claudio Neto

[Resolvido] Item de struct do Tipo texto

Recommended Posts

Preciso montar um struct que um dos ítens receba strings. Fiz assim:

 

struct DadosLigar{
	int placa;
	int canal;
	char destino[15];
};

E na hora de passar o valor estou passando assim:

char num_dest[15];

printf("Digite o numero que pretende ligar: ");
scanf("%s",&num_dest);
							
DadosLigar Dados;
Dados.placa = p;
Dados.canal = c;
Dados.destino = num_dest;

Mas está dando erro na linha que num_dest para Dados.destino. O erro é ISO C++ forbids assignment of arrays.

 

Como posso passar o parâmetro que preciso sem cair nesse erro?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, voce pode fazer desta maneira:

 

#include <stdio.h>

struct DadosLigar
{
    int placa;
    int canal;
    char *destino;
};

int main()
{
    DadosLigar Dados;

    printf("Digite a placa: ");
    scanf("%d", &Dados.placa);

    printf("Digite o canal: ");
    scanf("%d", &Dados.canal);

    setbuf(stdin, NULL);

    printf("Digite o destino: ");
    gets(Dados.destino);

    return(0);
}

E se quizer passar a struct por parâmetro:

 

#include <stdio.h>

struct DadosLigar
{
    int placa;
    int canal;
    char *destino;
};

void recebeDados(struct DadosLigar *Dados);

int main()
{
    DadosLigar Dados;

    recebeDados(&Dados);

    return(0);
}

void recebeDados(struct DadosLigar *Dados)
{
    printf("Digite a placa: ");
    scanf("%d", &Dados->placa);

    printf("Digite o canal: ");
    scanf("%d", &Dados->canal);

    setbuf(stdin, NULL);

    printf("Digite o destino: ");
    gets(Dados->destino);

    print0f("%d\n", Dados->placa);
    printf("%d\n", Dados->canal);
    printf("%s\n", Dados->destino);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evite usar gets(). Use fgets()

http://www.linhadecodigo.com.br/Dica.aspx?id=1141

 

 

beraldo@orion:/tmp$ cat gets.c

#include <stdio.h>

int main()
{
	char str[3];
	
	gets( str );
	
	printf( "%s\n", str );
	
	return 0;
}
beraldo@orion:/tmp$ gcc -Wall gets.c -o gets

/tmp/ccCMyPo0.o: In function `main':

gets.c:(.text+0x10): warning: the `gets' function is dangerous and should not be used.

beraldo@orion:/tmp$ ./gets

uma longa string para testar o estouro de buffer

uma longa string para testar o estouro de buffer

Falha de segmentação

beraldo@orion:/tmp$

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal Fernando, obrigado.

 

Ainda não testei mas já darei uma olhada.

 

No momento, o que me passou serve direitinho, mas farei ainda algumas alterações no programa, e o valor de destino não será pego digitando, e sim num bloco de notas. Nesse caso, como faço para passar o valor para Dados.destino?

 

Achei o método abaixo, serve para o que preciso?

char destino[ 255 ];
char aux[ 255 ];

printf("Digite o destino:");
scanf("%s",aux);
			
sprintf(destino, aux);
Dados.destino = (byte *) &destino;

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você vai ler o valor destino do txt certo?

você testo esse seu modo?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de testar os dois métodos.

 

Para o passado pelo Fernando_, consigo compilar, mas dá erro na hora de executar, sem apresentar o erro apenas fechando o aplicativo.

 

Tentei aletar a função que está recendo segundo indicações, mas não deu certo. Provalemente por ser uma thread, sei lá.

 

Do jeito que postei, para funcionar, precisei alterar o struct, e onde destino estava declarado com char, declarei como byte.

Ai deu certo.

 

Ficou assim:

struct DadosLigar{
	int placa;
	int canal;
	byte *destino;
};

printf("Digite o destino:");
scanf("%s",aux);
	
sprintf(destino, aux);
Dados.destino = (byte *) destino;

char numeroB[] = "5678"; // numero de origem
// cria a string que será enviada como parâmetro
char params[ 255 ];
sprintf(params, "dest_addr=\"%s\" orig_addr=\"%s\" ", Dados.destino, numeroB);

Só uma observação: Quanto a dica do Beraldo, tentei usar mas dá erro. Deixando gets funciona, fgets não.

 

Obrigado e todos e desculpem, no fim das contas acabei resolvendo com o que achei na net. Só abri o tópico pq não tinha achado antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou colocar como resolvido então ;D

 

e com fgets(); n funciono? oq ocorre qnd você utiliza?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse foi o erro Tiuzaum:

 

C:\C++\khomp>g++ -I./include discador.cpp "include/k3l.lib" -o discador
discador.cpp: In function `int main()':
discador.cpp:227: error: invalid conversion from `byte*' to `char*'
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdio.h:239: error: to
o few arguments to function `char* fgets(char*, int, FILE*)'
discador.cpp:227: error: at this point in file

E a linha 227 é:

fgets(Dados.destino);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi voce conseguiu resolver o problema certo?

Qualquer duvida com I/O em arquivos posta ae.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando, sem flood por favor.

 

Claudio, fgets recebe três parametros e tem uma declaração parecida com a seguinte:

size_t fgets(char *buff, size_t len, FILE *stream);

Supondo que você quer ler 255 caracteres do terminal e mandar para uma variável chamada A, ficaria:

fgets(A, 255, stdin);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.