Jump to content
David Rego

Atribuições em listas ligadas

Recommended Posts

David Rego

Boa tarde, existe maneira de conseguir fazer uma atribuição do genero:

typedef struct {
char nome[50];
p prox;
}estru,*p;

char palavra[50]="ola";
p->nome=palavra;

?

isto tendo em conta que já tenho memória alocada previamente

Share this post


Link to post
Share on other sites
David Rego

Utiliza a função strcpy.

Obrigado ;)

Já agora, qual é a explicação para não dar para fazer directamente?

Share this post


Link to post
Share on other sites
Localhost

A variável não é de facto um conjunto de chars mas sim um ponteiro para o inicio desse conjunto, portanto, a variável contem o início da string e não a string em si.

Podias fazer p -> nome = palavra mas assim a variável nome estaria a receber o endereço do primeiro elemento da variável palavra. Suponho que não seja isso que queiras fazer, deves querer mesmo passar o conteúdo de palavra para nome, por isso tens mesmo que utilizar a função strcpy. Na verdade esse código daria-te um erro de compilação. Para fazeres o que eu te disse anteriormente a variável nome tinha que ser declarada como: char *nome (é um ponteiro!).

Um bom exemplo para entenderes aquilo que eu disse é tentares comparar strings com o operador de igualdade (==). Estarias a comparar o endereço do primeiro elemento de duas strings distintas ou seja, o resultado era sempre diferente.

Já agora, não deves utilizar a função strcpy mas sim a strncpy para não teres problemas com buffer overflows.


here since 2009

Share this post


Link to post
Share on other sites
Baderous

Na verdade esse código daria-te um erro de compilação. Para fazeres o que eu te disse anteriormente a variável nome tinha que ser declarada como: char *nome (é um ponteiro!).

Não me parece.

O que dá erro de compilação é a declaração da estrutura, por causa do campo prox, está a ser-lhe atribuído um tipo que ainda não é conhecido na altura da declaração.

Share this post


Link to post
Share on other sites
Localhost

Não me parece.

O que dá erro de compilação é a declaração da estrutura, por causa do campo prox, está a ser-lhe atribuído um tipo que ainda não é conhecido na altura da declaração.

Pelo menos um warning tem que dar. É uma questão de se testar.


here since 2009

Share this post


Link to post
Share on other sites
Baderous

Eu testei e não percebi porque disseste que tinha de ser um char* na estrutura.

Share this post


Link to post
Share on other sites
Localhost

Por isto que compilei no ideone:

#include <stdio.h>

int main (void)
{
   char str1[120], str2[120];
   
   scanf ("%s", str1);
   str2 = str1;
   
   printf ("%s\n", str2);
   
   return 0;
}

«prog.c:8: error: incompatible types in assignment».


here since 2009

Share this post


Link to post
Share on other sites
Baderous

Sim, mas eu pensei que estavas a dizer que era preciso ser char* para usar o strcpy.

Share this post


Link to post
Share on other sites
Localhost

Não. Repara que esse parágrafo na minha resposta fala sobre a atribuição.


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.