2012-12-13 2 views
0

Je veux obtenir les éléments d'un tableau de caractères, mais pas de succès du tout, le problème est que je reçois seulement le premier et dernier élément et rien de plus, mon code est:arithmétique pointeur en C pour obtenir une chaîne

void getcharacters(char *cad) 
{ 
int l; 
int *i; 
l=strlen(cad); 
for (i=&cad[0];i<&cad[l];i++){ 
    printf("%c\n",*cad); 
} 
} 

une aide? Merci

+3

Est-ce que "i" ne devrait pas être déclaré comme "char * i"? – nhahtdh

+0

Aussi, pourquoi imprimer * cad? Il ne change jamais du premier caractère. – goji

+0

Peut-être que vous vouliez imprimer '* i' au lieu de' * cad'? –

Répondre

2

Vous utilisez le même caractère (ou *cadcad[0]) pour tous les années printf. Ce dont vous avez besoin est d'utiliser l'index pour obtenir le caractère suivant dans chaque itération. Aussi je doit être un pointeur vers un char:

void getcharacters(char *cad) 
{ 
int l; 
char *i; 
l=strlen(cad); 
for (i=&cad[0];i<&cad[l];i++){ 
    printf("%c\n", *i); 
} 
} 
4

La taille d'un int peut être aussi grand que 4 x la taille d'un char, donc quand vous i++ vous sautez en fait 3 caractères. En outre, vous imprimez *cad au lieu de *i.

Pour fixer le changement i-char* et imprimer *i au lieu de *cad

+0

"' int' peut être aussi grand que 4 'char's 'lol, je dirais que' char' n'est pas garanti pour avoir la même taille de 'int' (et dans la plupart des cas ils ne le seront jamais) –

+0

@AlvinWong typiquement sizeof (int) == 4 while sizeof (char) == 1 je crois –

2

Pourquoi vous itérer pas de premier caractère au dernier et y accéder comme index de tableau

int i; 
int l=strlen(cad); 
for (i=0;i<l;i++) 
{ 
    printf("%c\n",cad[i]); 
} 
1

D'autres réponses que vous avez dit pourquoi il plaine ne fonctionne pas, je me demande pourquoi vous n'êtes pas simplement itérer jusqu'à la terminaison nulle?

void getcharacters(char *cad) 
{ 
char *i; 
for (i = cad; *i; i++) { 
    printf("%c\n",*i); 
} 
} 
+0

'i' devrait être un' * char' au lieu de '* int' – Templar

+0

Woops merci, copier coller erreur;) – goji