Ir para conteúdo

POWERED BY:

Arquivado

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

Beuleal

Monatgem de matriz - Strings!

Recommended Posts

olá Galera, é uma duvida boba q nao esta me deixando sair do lugar. Onde esta o erro nesse código na definicao da matriz?

 


    char fabricantes [10][10] ={"BMW","Porche","Ferrari","Audi","Chevolet","Fiat","Toyota","Honda","Hyundai","VW"}; 
    char modelos[4][10][10];
    modelos[1][10][10]={"X1","X3","Z4","M3"};

 

deixe me explicar, cada fabricante terá 4 modelos, cada modelo tera no máximo 10 caracteres!

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você deveria usar ' (apóstrofo) ao invés de " (aspas) na definição dentro das chaves.

Não é isso. Apóstrofo (ou aspas simples) é usado para char. O exemplo usa char*, então é com aspas duplas, sim.

 

 

o problema é que a sintaxe usando chaves só funciona para intanciar e iniciar ao mesmo tempo:

por exemplo:

char x[2] = { 'a', 'b' };

 

note que isto não funciona:

char x[2];
x = { 'a', 'b' };

 

então você tem que fazer um loop e preencher os dados usando strcpy() ou declarar e iniciar tudo em uma só expressão

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não é isso. Apóstrofo (ou aspas simples) é usado para char. O exemplo usa char*, então é com aspas duplas, sim.

 

Me desculpe, mas onde o exemplo usa char*?

 

---

 

Beuleal, o problema é que você, além de estar confundindo inicialização com atribuição, você está inicializando tudo errado.

 

Lembre-se que você está fazendo a inicialização de um vetor multidimensional. Estude mais sobre vetores para entender porque.

 

O correto seria isso:

 

char fabricantes [10][10] = { "BMW", "Porche", "Ferrari", "Audi", "Chevolet", "Fiat", "Toyota", "Honda", "Hyundai", "VW" };
char modelos[4][10][10] = { { "X1", "X3", "Z4", "M3" } };

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
char é um caracter

char* é uma string. Considerando que estamos falando de C, e não C++, o "vetor de caracteres" é char* e não string

 

Não. Primeiro que essa parte é igual em C++, não confunda as coisas.

 

O vetor de caracteres não é char*. char* também não é uma string, você está confundindo conceitos.

 

E em C++ um vetor de caracteres continua sendo um vetor de caracteres, uma string é outra coisa completemente diferente.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. Primeiro que essa parte é igual em C++, não confunda as coisas.

Não é igual em C++. Ela pode ser igual. Eu poderia definir:

 

string fabricantes[10];

 

 

O vetor de caracteres não é char*. char* também não é uma string, você está confundindo conceitos.

um vetor é um ponteiro para a posição inicial. Uma string (char*) também o é.

 

E em C++ um vetor de caracteres continua sendo um vetor de caracteres, uma string é outra coisa completemente diferente.

Por que completamente diferente? string em C++ é um objeto, mas continua sendo representada por uma cadeia de caracteres

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não é igual em C++. Ela pode ser igual. Eu poderia definir:

 

string fabricantes[10];

 

Isso não é uma 'string', isso é uma 'std::string'. Por isso estou dizendo que você está se confundindo. O que você chama de 'string' em C e C++ é um vetor de caracteres.

 

 

um vetor é um ponteiro para a posição inicial. Uma string (char*) também o é.

 

Errado, um char* não é um ponteiro para a posição inicial de um vetor e muito menos uma string, é um ponteiro para um caracter.

Um vetor é uma 'variável que contém múltiplos elementos de um mesmo tipo de dados', não um 'ponteiro para a posição inicial'.

 

 

Por que completamente diferente? string em C++ é um objeto, mas continua sendo representada por uma cadeia de caracteres

 

Errado também, uma 'std::string' não é representada por uma cadeia de caracteres. Ela é uma classe.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Completando o que o Renato disse.

 

Um char* só pode ser encarado como uma string em c(vetor de caracteres) se você utilizá-lo com alocação dinâmica de memória. Caso contrário será apenas um ponteiro para char.

 

Em C++:

char* pcString = new char[80];

 

Onde operador new retorna um ponteiro para a área alocada. Este ponteiro é recebido pelo pcString, que é ponteiro para char.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. Um vetor nunca é um ponteiro. Um (char *) sempre será um (char *).

 

A confusão acontece porque o valor de um vetor é um ponteiro para seu primeiro elemento, então as pessoas acabam confundindo o tipo do vetor com o tipo de seu valor.

 

Apesar desta relação (a propósito, unidirecional) entre os dois tipos, o tamanho e representação de objetos de cada um deles é independente.

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.