2010-03-30 3 views
11
#include<cstdio> 
#include<stdlib.h> 

int main() 
{ 
    char* ptr=NULL; 
    printf("%s",ptr); 
    return 0; 
} 

Elle imprime (null) en tant que sortie. Ce qui précède est un exemple de code. En code réel, je reçois char * comme retour d'une fonction et je souhaite imprimer la chaîne de caractères pour la journalisation. Cependant, NULL est également une valeur de retour valide de cette fonction et donc je me demande si une vérification nulle est nécessaire avant d'imprimer la chaîne de caractères?Le code C suivant est-il sécurisé?

char* ptr=someFuncion(); 
// do i need the following if statement? 
if(ptr!=NULL) 
{ 
    printf("%s",ptr); 
} 

Je veux juste être sûr que la sortie serait même à savoir si ptr = NULL alors sortie doit être (null) sur toutes les plateformes et les compilateurs et le code ci-dessus (sans instruction if) ne plantage sur tout Plateforme compatible C standard.

En bref, est le code ci-dessus (sans instruction if) compatible avec la norme?

Merci pour votre aide et la patience :)

Cordialement

lali

+0

Qu'est-ce qui l'en-tête '' fournir à votre code? Votre code appelle un comportement indéfini en passant un pointeur null à une fonction qui n'en attend pas. Tout peut arriver - y compris le fait qu'il pourrait accidentellement fonctionner, surtout. –

+0

ok, j'ai compris. Merci à tous pour cette aide "en temps réel" :)) – ghayalcoder

Répondre

21

En bref, est le code ci-dessus (sans l'instruction if) compatible avec la norme?

N ° ISO/CEI 9899: 1999 (document standard C) ne fait aucune déclaration sur ce qui devrait se produire si ptr est NULL, de sorte que le comportement est non défini. La bibliothèque que vous avez utilisée était simplement assez amicale pour vous donner un résultat utile ("(null)") au lieu de planter.

Inclure la vérification explicite NULL.

5

En cas de doute, vous ne devriez pas compter sur les détails de mise en œuvre et effectuer une (ptr != NULL) supplémentaire - c'est aussi bonnes pratiques de codage.

7

Voulez-vous dire quelque chose comme ça?

 
    char* result = foo(); 
    printf ("result is %s\n", (result ? result : "NULL")); 
+0

J'ai bien aimé celui-ci, merci :) – ghayalcoder

1

Habituellement, vous serez en clair sans la déclaration if, selon mon expérience, même si j'ai tendance à éviter de faire ce que vous avez illustré par habitude ... ça fait longtemps, mais j'ai utilisé les compilateurs Sun de travailler avec entraînerait un accident tout ou partie du temps si vous avez passé un char NULL * dans printf(), il est juste plus facile et plus sûr d'inclure le chèque ... Je vais jeter dans la note sur l'utilisation du macro-forme, mais je vois que j'ai été passé à tabac que lui comme 3 autres personnes dans les 30 secondes depuis que je frappe ce :)

Questions connexes