Estruturas [RESOLVIDO]

1. Estruturas [RESOLVIDO]

david oliveira barbosa
dobpardal

(usa Debian)

Enviado em 28/06/2013 - 15:30h

Olá senhores estou estudando estruturas em C pois bem em um exercício foi proposto criar uma estrutura para um carro contendo os membros marca (char15), ano (int), cor(char10) e preco (float), criei a estrutura e tudo, porém ao adicionar alguma informação aos elementos char (strings) sempre é acusado erro pelo compilador dizendo que o tipo char[15] não é char*, segue código

#include <stdio.h>
struct carro{
char marca [15];
int ano;
char cor [10];
float preco;
};



struct carro vetcarros[20];

int main(){
/*printf("#################### MENU PRINCIPAL ####################\n");
printf("#\n#\n#");
printf("#1 - Precos");*/
struct carro vetcarros[20];
vetcarros[0].marca = "f";
vetcarros[0].ano = 2010;
vetcarros[0].cor = "vermelho";
vetcarros[0].preco = 22000;

printf("%c\n", vetcarros[0].marca);
printf("%d\n", vetcarros[0].ano);
printf("%c\n", vetcarros[0].cor);
printf("%f\n", vetcarros[0].preco);

}

O compilador que estou usando é o gcc, esse programa está sendo desenvolvido em cima do linux mint, porém já testei com o debian 7 com gcc 4.7 e win 8, ha propósito não quero resposta do tipo "ha faça assim" quem responder se puder me explicar o motivo do erro e qual o procedimento que deve ser tomado para lidar com esses char[] dentro e fora das estruturas agradeço


  


2. Re: Estruturas [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/06/2013 - 16:08h

Um array não é um lvalue, logo não pode receber diretamente um valor. Os elementos do array é que podem ser modificados, um de cada vez.

Como você não que que diga como fazer, eu vou no máximo sugerir que você procure no Google sobre o funcionamento de strncpy().


3. lvalue

david oliveira barbosa
dobpardal

(usa Debian)

Enviado em 28/06/2013 - 16:44h

Blz paulo1205 ja pesquisei o strcpy inclui essa função no código ficou assim:

#include <stdio.h>
#include <string.h>
struct carro{
char marca [15];
int ano;
char cor [10];
float preco;
}uno;



struct carro vetcarros[20];



int main(){
/*printf("#################### MENU PRINCIPAL ####################\n");
printf("#\n#\n#");
printf("#1 - Precos");*/

strcpy(vetcarros[0].marca, "fiat");

printf("%s",vetcarros[0].marca);
}

agora uma outra dúvida, o que seria esses lvalues que você citou anteriormente? como não conheço o conceito fiquei bastante curioso, se puder me explicar com detalhes agradeço, quanto a resposta anterior muito obrigado viu ta funcionando direitinho.


4. Re: Estruturas [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/06/2013 - 00:59h

Bom, eu não recomendo strcpy() nem strcat(), mas sim strncpy() e strncat() (ou strlcpy() e strlcat(), se seu sistema as possuir, mas acho que elas só existem nos BSDs).

Uma definição comum, mas grosseira, de lvalue é "uma expressão que, quando avaliada, pode aparecer no lado esquerdo de uma operação de atribuição, uma vez que designa um objeto em memória que pode ser modificado". São exemplos de lvalues: variáveis que não tenha o atributo de constante, elementos de um array não-constante, a de-referência de um endereço apontado por um ponteiro, um campo não-constante de uma estrutura. Por outro lado, não são lvalues variáveis constantes (quase um oxímoro, não? -- se é constante, como pode ser variável? ;) ), nomes de arrays, tipos compostos (struct e union) que contenham campos constantes e nomes de função.

O padrão do C fala em lvalues de modo mais formal. Veja <http://www.iso-9899.info/n1570.html#6.3.2.1>.


5. lvalue

david oliveira barbosa
dobpardal

(usa Debian)

Enviado em 29/06/2013 - 08:36h

Certo paulo1205, vou adaptar o meu programa para não usar o strcpy(), quanto ao lvalue vou dar um exemplo e ver se entendi:

int x;

x = 15;

esse x seria um lvalue não por ser um int né mas por quê a atribuição feita dessa forma para o tipo de dado especificado funciona é isso?

Já que nem você falou no caso de constantes essa atribuição não funciona por quê é um espaço em memória cujo conteúdo não pode ser alterado, ou pode de alguma outra forma que não atribuição "=" ???

Mais uma vez agradeço por compartilhar seu conhecimento, valeu mesmo.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts