Remarque: Je ne peux pas publier de code car cela fait partie d'une tâche que je suis en train de faire.La terminaison NULL est supprimée de la chaîne lorsqu'elle est passée à la méthode en tant que paramètre,
En ce moment, j'ai quelque chose comme
int main(){
char buf[30];
// Code that reads input and assigns it to buf
// Adds null terminator to the end of the buf
foo(buf);
}
void foo(char * buf){
// Do something
}
Cependant quand je débogage je remarque que la valeur de buf dans foo a la chaîne mais pas avec la terminaison nulle. J'utilise strcmp pour comparer buf et une autre chaîne dans la méthode foo(), et je soupçonne que c'est une raison pour un bug dans mon code.
Des idées pour lesquelles cela se passe? (Désolé, je suis encore assez mauvais avec C)
Ce n'est pas le cas. Quelque chose d'autre se passe. Nous ne pouvons pas déterminer ce que c'est parce que vous ne postez pas votre code. –
Vous avez supprimé exactement la partie dans le code où le problème existe probablement. Qu'est-ce que vous utilisez pour lire l'entrée? Est-ce que cette méthode ajoute un octet de terminaison NUL (beaucoup le font) ou êtes-vous censé l'ajouter? Quelle est la valeur de retour de la fonction de lecture d'entrée? Est-ce qu'il renvoie le nombre d'octets lus? peut-être qu'il renvoie un pointeur sur le premier octet de la chaîne? Pensez à initialiser le 'buf' en utilisant' buf [30] = {0} '. En outre, pensez à vérifier les dépassements de tampon. – Myst
Ce que vous décrivez est * extrêmement * peu probable. Si c'est 'NUL' terminé dans' main', cela sera toujours le cas dans 'foo', sauf si vous avez des problèmes de débordement de tampon étranges en cours de route. Plus probablement, il n'a jamais été correctement terminé «NUL» pour commencer. Vous devez fournir le code actuel dans 'main', parce que c'est là que se situe le problème. – ShadowRanger