Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
NCS_One

Array de strings.

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Localhost

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


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
Sign in to follow this  

×

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.