2010-04-02 3 views
1

J'ai une chaîne initialisée par {'\ 0'} à chaque fois ia boucle et y stocke des caractères allant de 0 à 9 quand je convertis atoi (temp) où temp = "2" il me renvoie 20 au lieu de 2 Je dois faire pour obtenir les valeurs précises, l'aide requise.Je trouve un problème en utilisant la méthode atoi() dans ansi c?

+4

Vous devriez publier le code que vous utilisez, sinon les gens ne peuvent que deviner ce qui ne va pas. – sth

+1

Pouvez-vous poster du code? –

+2

Un peu de ponctuation dans un message aiderait énormément aussi. J'ai du mal à comprendre où une clause commence et une autre se termine. Est-ce que vous initialisez la chaîne à chaque fois dans une boucle ou y stockez des caractères à chaque fois dans une boucle? Ou les deux? –

Répondre

0

Un couple de choses à vérifier:

  • Avez-vous êtes TERMINAISON la chaîne, après avoir ajouté votre personnage (s)?
  • Avez-vous alloué assez de mémoire pour la chaîne entière, y compris le nouveau terminateur null?

Quelque chose comme cela devrait fonctionner:

char buffer[2] = {'\0'}; // note "[2]" to set aside two bytes 
buffer[0] = '2'; 
buffer[1] = '\0'; // ensure it's still terminated 
printf("%d\n", atoi(buffer)); 
+0

Vous n'avez pas assez d'informations pour répondre à cette question. De plus, avec 'char buffer [2] = {'\ 0'};' ** all ** 'tampon [x]' (0 et 1 dans ce cas) sont garantis à zéro. Il n'est pas nécessaire de faire 'buffer [1] = '\ 0';' donc ça ne peut pas être la cause du problème. –

+0

Vous avez raison sur la terminaison nulle à la première itération, mais puisque (comme vous le dites) nous n'avons pas le code, nous ne savons pas si l'OP réutilise le tampon, ou combien de caractères il met dans chaque temps autour. La terminaison explicitement nulle, bien que parfois excessive, est toujours sûre. J'ai pensé qu'une réponse partielle, qui pourrait ou non aider, était plus utile que pas de réponse du tout. Je suppose que vous n'êtes pas d'accord. –

2

Peu importe ce que votre problème à obtenir atoi travailler est, vous devriez plutôt utiliser strtol. Le manuel d'information libc:

- Fonction: int atoi (const char * STRING)

This function is like `atol', except that it returns an `int'. 
The `atoi' function is also considered obsolete; use `strtol' 
instead 

Voir this answer par exemple comment utiliser strtol.

0

Je suppose que le problème n'est pas atoi, devrait être quelque chose d'autre. Veuillez vérifier les pointeurs, déboguer étape par étape, etc.

Questions connexes