2010-03-02 5 views
0

Cela semble facile, mais j'ai un bogue et je ne suis pas sûr de savoir ce qui le cause?Affectation de la valeur char dans un tableau à la valeur char dans un autre tableau

nopunccount = 0; 
char *ra = new char[sizeof(npa)]; 
while (nopunccount <= strlen(npa)) { 
    ra[nopunccount] = npa[strlen(npa) - nopunccount]; 
    nopunccount++; 
} 

ra jamais obtient une valeur en elle et je l'ai vérifié que npa a des valeurs à fournir dans ombles la plage de nopunccount.

Toute aide est appréciée :) //

+0

Maintenant, est-ce que 'npa' est déclaré? Qu'est-ce que 'strlen (npa)'? S'il vous plaît poster le code de travail. –

+0

char * npa = nouveau char [sizeof (str)]; str est déclaré en tant que param à la fonction en tant que (char * str) – Spanky

+0

C'est un problème: 'sizeof (str)' va donner des résultats erronés (ie cela donnera la taille d'un pointeur, * pas * la longueur de la chaîne !). –

Répondre

4

nopunccount commence à 0, donc dans la première itération de la boucle le caractère affecté à ra[0] est npa[strlen(npa)]. C'est le '\0' de fin de cette chaîne. Ainsi, la chaîne résultante dans ra commence par '\0' et est donc considérée comme se terminant à ce premier octet par les fonctions de chaîne habituelles.

+0

Groovy, ne savait pas que vous ne pouvez pas avoir une valeur nulle chaîne moyenne, mais cela a un sens parfait. Merci :) – Spanky

+0

Une chaîne terminée par un caractère nul ne peut pas avoir une valeur null au milieu de la chaîne par définition, car une valeur nulle termine la chaîne ... –

2

Qu'est-ce que la déclaration de npa ressembler? Si c'est un pointeur, sizeof(npa) aura la taille d'un pointeur, plutôt que la taille allouée. S'il s'agit de chaînes à terminaison nulle (également appelées "chaînes C"), utilisez strlen et non sizeof. Si ce ne sont pas des chaînes, vous devez suivre le montant que vous avez alloué dans une variable séparée.

J'ai d'autres critiques de ce code, peut-être sans rapport avec votre problème.

while (nopunccount <= strlen(npa)) { 

strlen est une opération O (n). Ce code parcourra la chaîne npa dans chaque itération de boucle. Il est préférable de ne calculer la longueur qu'une seule fois.

ra[nopunccount] = npa[strlen(npa) - nopunccount]; 

Même problème ici.

+0

Merci, bons points :) – Spanky

Questions connexes