Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NCS_One

Array de strings.

Mensagens Recomendadas

NCS_One

Boas.

Estou a tentar aprender alguma coisa de C e deparei-me com isto :

#include <stdio.h>
main()
{
  char Str[][3] = { "aaa", "bbb", "ccc" };
  printf( "%s\n", Str[1]);
}

Dá-me este output : bbbccc

Como faço para me dar só o : bbb ?

E já agora, devo usar o cout ou o printf ? E como usar o cout ?

Obrigado.


Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NCS_One

;)

Quando andei no google a procurar soluções para o meu problema foi quando encontrei alguns a falar do cout, também achei estranho mas ...

Deviam ser daqueles tópicos que são C/C++ e eu não reparei.


Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
falk0n

#include <stdio.h>
main()
{
  char Str[][4] = { "aaa\0", "bbb\0", "ccc\0" };
  printf( "%s \n", Str[1]);
return 0;
}

Por acaso não te tinhas esquecido de colocar o terminador em cada um dos arrays de caracteres ?

Boas programações,

Nuno Martins

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NCS_One

Vi vários exemplos e nenhum usava \0 no final da string, por isso pensei que fosse colocado automaticamente.

Qual a melhor forma de fazer o que quero fazer ?

Além de outras encontrei estas :

char array_of_strings[6][6] = {"word1", "word2"}; /* in your restricted

chase. The strings are modifiable. */

char *array_of_strings[] = {"word1", "word2"}; /* More generally, but

the strings must be copied elsewhere if you want to use modified forms

of them, although the pointers can be modified. */

char *array_of_strings[6] = {"word1", "word2"}; /* If you must have six

strings, and string literals are not a problem. */

Mas assim funciona sem o \0, porquê?

#include <stdio.h>
main()
{
  char *Str[] = { "aaa", "bbb", "ccc" };
  printf( "%s\n", Str[1]);
}


Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Os exemplos sem terminador são em C++. Uma das diferenças entre o C++ e o C é essa, controle de final de arrays.

O output que te deu, é porque a execução não sabia onde parar, logo, continuou pelo array exterior até ao fim. Não sei se me faço entender...

Isto é, na memória, o teu array está guardado assim:

   a  a  a  b  b  b  c  c  c 
  [0][1][2][3][4][5][6][7][8]

Quando pedes Str[1], ele sabe que essa posição de memória é a 3 e depois vai por ali fora até encontrar um terminador ou acabar mesmo.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NCS_One

Então quando faço :

char Str[][3] = { "aaa", "bbb", "ccc" };

Vai ser guardado na memória tudo de seguida. Usando um único apontador.

E se fizer :

char *Str[] = { "aaa", "bbb", "ccc" };

Cada um vai ser guardado em um lugar diferente da memória (também podem ficar seguidos), com o seu tamanho. Usando 3 apontadores.


Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

O último que deste é um ponteiro para um array de strings (um ponteiro para o primeiro elemento desse array).


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.