Ir ao conteúdo

string em uma estrutura e copia-la em outra string


jefferson2008.1

Posts recomendados

Postado

declarei uma string em uma estrutura e quero agora quarda um valor (um nome) nela

mais não consigo

o compilador avisa "declaração sem efeito"

strcmp((Nova)->modelo ,informacao);

typedef struct NO{

int n;

char cidade[20];

char modelo[20];

char cor[20];

struct NO *prox;

struct NO *proxcor;

struct NO *proxcidade;

struct NO *proxmodelo;

}no;

void inserirPrincipal(no **princ ,no **cid ,no **mod, no **c)

{

int i, v,y;

char informacao[20];

no *Nova;

printf("quantos cadastro deseja fazer");

scanf("%d",&v);

for (i= 0;i< v;i++)

{

printf("modelo: ");

scanf("%s",&informacao[0]);

Nova =(no*)malloc(sizeof(no));

Nova =(*mod)->prox;

while (Nova != NULL)

{

if (strcmp(Nova->modelo,informacao)==0) /* o problema esta aqui nos ifs ele não entra aqui*/

{

Nova->proxmodelo = *princ;

strcmp((Nova)->modelo ,informacao);

Nova->proxmodelo=(*princ)->proxmodelo;

(*princ)->proxmodelo = Nova;

printf("ok");

break;

}

else

{

Nova = Nova->prox;

}

}

Postado

scanf("%s",&informacao[0]);

Me corrijam se eu estiver errado mas, essa linha quer ler uma string e armazenar em um ponteiro pra um char !!

Acredito que o correto seria:

scanf("%s",informacao); //se a ideia é ler uma string

ou

scanf("%c",&informacao); //se a ideia é ler um char

Postado

Só uma observação:

 scanf("%s",string);

é a *mesma coisa* que:

 scanf("%s"&string[0]);

O erro *não* é esse. Ao referenciar qualquer vetor usando seu 'nome', o que realmente é passado é o endereço da primeira posição.

Esse é o erro:

strcmp((Nova)->modelo ,informacao);

Acredito que voce quis usar:

strcpy((Nova)->modelo ,informacao);

Aqui esta o código correto (e identado):


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct NO{
int n;
char cidade[20];
char modelo[20];
char cor[20];
struct NO *prox;
struct NO *proxcor;
struct NO *proxcidade;
struct NO *proxmodelo;
}no;

void inserirPrincipal(no **princ ,no **cid ,no **mod, no **c){
int i, v,y;
char informacao[20];
no *Nova;
printf("quantos cadastro deseja fazer");
scanf("%d",&v);
for (i= 0;i< v;i++){
printf("modelo: ");
scanf("%s",&informacao[0]);
Nova =(no*)malloc(sizeof(no));
Nova =(*mod)->prox;
while (Nova != NULL){
if (strcmp(Nova->modelo,informacao)==0){
Nova->proxmodelo = *princ;
strcpy((Nova)->modelo ,informacao); /*AQUI ERA O PROBLEMA!*/
Nova->proxmodelo=(*princ)->proxmodelo;
(*princ)->proxmodelo = Nova;
printf("ok");
break;
}
else
Nova = Nova->prox;

}
}
}

E ainda o gcc me retornou 3 `warnings` (compilando com -Wall -Wextra): há 3 variáveis não usadas: 'y' 'cid' e 'c'.

Eu nao testei a funcão (apenas compilei esse exato código que eu postei com -c). Mas me parece que não há mais problemas (pelo menos erros sintáticos e léxicos) com o código.

Mais um coisa: *nunca* use a gets(). Ela apresenta um sério problema quanto à segurança. Eu recomendo usar uma scanf() formatada ou escrever alguma função na base do while e getc mesmo, se quiser eu tenho uma que fiz, que lê strings alocando dinamicamente o espaço, assim não há o perigo da gets().

Qualquer dúvida, estamos aí pra isso...

Abraços

Postado
Só uma observação:

 scanf("%s",string);

é a *mesma coisa* que:

 scanf("%s"&string[0]);

O erro *não* é esse. Ao referenciar qualquer vetor usando seu 'nome', o que realmente é passado é o endereço da primeira posição.

Esse é o erro:

strcmp((Nova)->modelo ,informacao);

Acredito que voce quis usar:

strcpy((Nova)->modelo ,informacao);

Aqui esta o código correto (e identado):


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct NO{
int n;
char cidade[20];
char modelo[20];
char cor[20];
struct NO *prox;
struct NO *proxcor;
struct NO *proxcidade;
struct NO *proxmodelo;
}no;

void inserirPrincipal(no **princ ,no **cid ,no **mod, no **c){
int i, v,y;
char informacao[20];
no *Nova;
printf("quantos cadastro deseja fazer");
scanf("%d",&v);
for (i= 0;i< v;i++){
printf("modelo: ");
scanf("%s",&informacao[0]);
Nova =(no*)malloc(sizeof(no));
Nova =(*mod)->prox;
while (Nova != NULL){
if (strcmp(Nova->modelo,informacao)==0){
Nova->proxmodelo = *princ;
strcpy((Nova)->modelo ,informacao); /*AQUI ERA O PROBLEMA!*/
Nova->proxmodelo=(*princ)->proxmodelo;
(*princ)->proxmodelo = Nova;
printf("ok");
break;
}
else
Nova = Nova->prox;

}
}
}

E ainda o gcc me retornou 3 `warnings` (compilando com -Wall -Wextra): há 3 variáveis não usadas: 'y' 'cid' e 'c'.

Eu nao testei a funcão (apenas compilei esse exato código que eu postei com -c). Mas me parece que não há mais problemas (pelo menos erros sintáticos e léxicos) com o código.

Mais um coisa: *nunca* use a gets(). Ela apresenta um sério problema quanto à segurança. Eu recomendo usar uma scanf() formatada ou escrever alguma função na base do while e getc mesmo, se quiser eu tenho uma que fiz, que lê strings alocando dinamicamente o espaço, assim não há o perigo da gets().

Qualquer dúvida, estamos aí pra isso...

Abraços

valeu galera

segui o que

MoNTiTo_DM falou e deu certo

o erro estava no strcmp

valeu a todos

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!