2016-12-08 3 views
-2

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)

+4

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. –

+0

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

+0

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

Répondre

0

Je spécule avec la quantité d'information que vous avez donnée mais il semble que votre tampon soit sur la pile et il n'a jamais été effacé. Plus que probablement vous avez des déchets dedans. Vous devriez initialiser votre tampon avec des zéros. Voici quelques façons de le faire.

  1. buf[] = {0};
  2. memset(buf, 0, sizeof(buf));

Rappelez-vous que lorsque vous déclarez une variable, il sera initialisé avec toute valeur sur la pile à cet endroit à ce moment précis. Vous devez initialiser toutes les variables à un état défini avant de les utiliser pour éliminer la possibilité d'introduire un comportement indéfini. De la quantité limitée d'informations que vous avez fournies, il semble que ce soit votre problème.