2010-05-31 3 views
1

Comment puis-je supprimer ces avertissements?Comment supprimer ces avertissements lors de l'effacement d'une chaîne c

char foo[10], msg2[100]; 
    int k; 
    for (k = 0; foo[k] != NULL; k++) //comparison between pointer and integer 
     msg2[k] = NULL; //assignment makes integer from pointer without a cast 

Merci.

+0

Quel est le type de foo et MSG2? –

+0

Comment sont déclarés foo et msg2? –

+0

Pourquoi ne pas afficher les déclarations pour foo et msg2? (wow - numéro 3 en 30 secondes :)) – Arkadiy

Répondre

2
int k; 
    for (k = 0; foo[k] != '\0'; k++) 
     msg2[k] = '\0'; 

Affectez un entier à une variable entière au lieu d'un pointeur. NULL est un pointeur. Il est généralement défini comme:

((void *) 0) 
+2

... et comparez foo [k] à 0 – James

+0

@Autopulated ouais, je l'éditais juste. Merci. – WhirlWind

+1

'msg2 [k] = '\ 0';' est généralement préféré à 'msg2 [k] = 0;', bien que les deux soient corrects bien sûr. –

1

L'avertissement est correct, votre utilisation de NULL est incorrecte.

La valeur NULL était destinée aux pointeurs, pas à la terminaison nulle-terminator.

Utilisez zéro au lieu de NULL dans votre code, aux deux endroits. Si vous voulez un zéro spécial, vous pouvez utiliser '\ 0', mais cela est redondant.

1
*foo = 0; 

Pour « Effacer » une chaîne de style C, tout ce que vous devez faire est de définir le premier octet à 0.

+0

Et si vous voulez remplir un bloc de mémoire avec 0, utilisez memset – Arkadiy

+2

Je crois que l'utilisation de ''\ 0'' au lieu de' 0' rend plus évident que nous avons affaire à une valeur char. – ereOn

Questions connexes