Ir ao conteúdo
  • Cadastre-se

Como alocar strings ?


kira911

Posts recomendados

Eu de novoO....seguinte pra alocar um tanto de caracteres pra uma string é assim correto?


printf("Quantos letras serao digitadas?");
scanf("%d",&quant);
s=(char*)malloc(quant*sizeof(char));

Mas e pra alocar strings como seria !?

Fiz algo do genero abaixo mas nao funcionou.. :(


printf("Quantos nomes serao digitados ?");
scanf("%d",&quant);
nome[80]=(char*)malloc(quant*sizeof(char));

Link para o comentário
Compartilhar em outros sites

Bem, como dizia jack, o estripador, vamos por partes.

1) se quer um vetor de strings, você quer uma matriz bidimensional de char alocada dinamicamente.

2) cada indice a esquerda de uma matriz bidimensional guarda o valor de tantos itens quanto forem os indices a direita.

char **matriz;//Defini um ponteiro de ponteiro

matriz=(char**)malloc(sizeof(char**)*80);

for(i=1; i<=80; i++)

matriz[i-1]=(char*)malloc(sizeof(char*)*80);

Dessa forma, você cria uma matriz bidimensional de tamanho 80 por 80

Link para o comentário
Compartilhar em outros sites

Bem, como dizia jack, o estripador, vamos por partes.

1) se quer um vetor de strings, você quer uma matriz bidimensional de char alocada dinamicamente.

2) cada indice a esquerda de uma matriz bidimensional guarda o valor de tantos itens quanto forem os indices a direita.

char **matriz;//Defini um ponteiro de ponteiro

matriz=(char**)malloc(sizeof(char**)*80);

for(i=1; i<=80; i++)

matriz[i-1]=(char*)malloc(sizeof(char*)*80);

Dessa forma, você cria uma matriz bidimensional de tamanho 80 por 80

Tá errado...

Isso que você fez cria uma matriz bidimensional de ponteiros para caractere... Ou uma tridimensional de caracteres, como queira...

Para 80 strings de 80 caracteres é assim:

char **matriz;
matriz=(char**)malloc(sizeof(char*)*80);
for(i=0; i<80; i++)
matriz[i]=(char*)malloc(sizeof(char)*80);

Link para o comentário
Compartilhar em outros sites

Nossa que estranho, bem diferente alocação de strings. Aqui funcionouU !

Só mais uma perguntinha...porque o "*" (asterisco) tem que ficar na frente do char na primeira parte e na segunda nao? E qual o sentido desse asterisco ali ?

Desde ja brigadaoO em.

matriz=(char**)malloc(sizeof(char*)*80);

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

matriz=(char*)malloc(sizeof(char)*80);

Link para o comentário
Compartilhar em outros sites

Nossa que estranho, bem diferente alocação de strings. Aqui funcionouU !

Só mais uma perguntinha...porque o "*" (asterisco) tem que ficar na frente do char na primeira parte e na segunda nao? E qual o sentido desse asterisco ali ?

Desde ja brigadaoO em.

Matrizes bidimensionais são na verdade vetores unidimensionais de vetores!

Um vetor é referenciado por um ponteiro, logo, o nome de uma matriz referencia um vetor de ponteiros, onde cada ponteiro aponta para o vetor de elementos da linha correspondente.

Ou seja, se queremos uma matriz de caracteres, primeiro criamos um vetor de ponteiros que define a quantidade de linhas da matriz:

matriz=(char**)malloc(sizeof(char*)*80);

Depois alocamos cada linha:

for(i=0; i<80; i++)
matriz[i]=(char*)malloc(sizeof(char)*80);

A partir desse ponto temos nossa matriz[80][80] (que vai de matriz[0][0] a matriz[79][79])

O último obviamente não deve ser alocado usando o asterisco, afinal queremos efetivamente gravar os caracteres e não endereços de memória que contenham caracteres.

Para qualquer outro tipo, a sequência de passos é a mesma.

-

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
Por favor me digam. Onde eu estou alocando quantidade de caracteres e quantidade de linhas aqui ?

Aqui você aloca 80 linhas.

matriz=(char**)malloc(80*sizeof(char*));

E aqui para cada linha, você aloca 80 colunas.

for(i=0; i<80; i++)
matriz[i]=(char*)malloc(80*sizeof(char));

Link para o comentário
Compartilhar em outros sites

Aqui você aloca 80 linhas.

matriz=(char**)malloc(80*sizeof(char*));

E aqui para cada linha, você aloca 80 colunas.

for(i=0; i<80; i++)
matriz[i]=(char*)malloc(80*sizeof(char));

Eu achei que tinha entendido mas nao :(

Tipo quando mando alocar string dentro de um looping, nao quero que aloque 80 strings a cada volta do looping e sim apenas uma string a cada volta. E quando coloco pra aloca uma stiring de 80 caracteres da erro :/

Exemplo:

Nesse codigo acima onde esta escrito "aqui voce aloca 80 linhas" na parte onde ta oitenta eu coloco 1 esta errado isso ? Porque alocar 80 linhas a cada volta do looping é absurdo ne, mas porque quando coloco 1 nao funciona ?

Me ajudem por favoooOr !

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!