C itérer char tableau avec un pointeur
Je suis nouveau en C et je me demandais à propos de la façon d'obtenir chaque élément d'un tableau à l'aide d'un pointeur. Ce qui est facile si et seulement si vous connaissez la taille de la matrice.
Afin de laisser le code:
#include <stdio.h>
int main (int argc, string argv[]) {
char * text = "John Does Nothing";
char text2[] = "John Does Nothing";
int s_text = sizeof(text); //returns size of pointer. 8 in 64-bit machine
int s_text2 = sizeof(text2); //returns 18. the seeked size.
printf("first string: %s, size: %d\n second string: %s, size: %d\n", text, s_text, text2, s_text2);
return 0;
}
Maintenant, je veux déterminer la taille de text
. pour ce faire, j'ai découvert que la Chaîne se termine par un '\0'
caractère. J'ai donc écrit la fonction suivante:
int getSize (char * s) {
char * t; //first copy the pointer to not change the original
int size = 0;
for (t = s; s != 'int getSize (char * s) {
char * t; //first copy the pointer to not change the original
int size = 0;
for (t = s; s != '\0'; t++) {
size++;
}
return size;
}
'; t++) {
size++;
}
return size;
}
Cette fonction, cependant, ne fonctionne pas tant que la boucle semble pas fin.
Alors, est-il un moyen pour obtenir la taille réelle de la char
s le pointeur pointe sur?
- Ce qui malheureusement ne change rien au résultat. n'a pas d'importance si je utiliser
s != '\0'
ou*s != '\0'
out != '\0'
ou*t != '\0'
, il finit toujours pas appelé à disparaître... - Vous êtes de réimplanter
strlen
. - Votre fonction n'utilise pas
s
, quel est donc le point dans la préservation de "l'original" de la valeur?
Vous devez vous connecter pour publier un commentaire.
Au lieu de vérifier le pointeur, vous devez vérifier la valeur actuelle. Vous pouvez le faire comme ceci:
Ou de façon plus concise:
for (t = s; *t; t++) {}
(vous avez au moins déplacé le';'
à une ligne de sa propre -- c'était bon)Il y a une faute de frappe dans cette boucle
Je pense que tu veux dire
Néanmoins, en général, la fonction ne pas fournir une valeur qui est équivalent à la valeur retournée par l'opérateur
sizeof
même si on compte également la résiliation de zéro. Au lieu de cela, il fournit une valeur équivalente à la valeur retournée par la fonction standardstrlen
.Par exemple de comparer la sortie de cet extrait de code
De sorte que votre fonction calcule la longueur d'une chaîne.
Il serait plus correct de le définir de la façon suivante (en utilisant des pointeurs)