J'ai essayé de créer un programme simple qui boucle les membres d'un tableau et balaye les caractères recherchant un caractère spécifique. J'ai rencontré un problème où strcmp()
fonctionne seulement au début de la boucle. J'ai du mal à comprendre pourquoi cela arrive et toute aide serait appréciée.strcmp ne fonctionne qu'au début d'une boucle
char *file[3] = {"!x", "!!x", "x!"};
for (int i = 0; i < sizeof(file)/sizeof(file[0]); i++) {
char *line = file[i];
printf("\n");
for (int i = 0; i < strlen(line); i = i + 1) {
char character = line[i];
if (strcmp("!", &character) == 0) {
printf("[YES] %c\n", character);
} else {
printf("[NO] %c\n", character);
}
}
}
sortie
[YES] ! [NO] x [YES] ! [NO] ! [NO] x [NO] x [NO] !
Pourquoi utilisez-vous une fonction de comparaison ** chaîne ** pour comparer des caractères ** uniques **? – Olaf
vous pouvez avoir un comportement indéfini: rien ne garantit que le pointeur sur un char a un zéro à proximité car ce n'est pas une chaîne. –
Les commentaires ici sur une chaîne terminée par un caractère nul sont, bien sûr, corrects. Le comportement semble toujours étrange puisque, dans ce cas, nous savons ce qui vient après '& character' puisque nous connaissons le reste des caractères de la chaîne. Ce n'est pas clair pour moi pourquoi il se comporte mal de cette manière spécifique. – Brick