Macro de la bibliothèque C -NULL
Bibliothèque standard C - <stddef.h>
Description
Macro de la bibliothèque CNULLest la valeur d'une constante de pointeur nul.
NULLest une macro qui représente une constante de pointeur nul. Elle est généralement définie comme((void*)0), qui représente un pointeur nul pointant vers l'adresse mémoire 0.- En C++,
NULLpeut être défini comme0ou0L, afin d’être compatible avec les entiers0Comparez.
Déclaration
Ci-dessous se trouve une déclaration de la macro NULL dépendante du compilateur.
#define NULL ((char *)0) ou #define NULL 0L ou #define NULL 0
Paramètre
- N/D
Valeur de retour
- N/D
Utilisation
NULLIl est utilisé pour indiquer qu’un pointeur ne pointe vers aucun objet ni aucune adresse valide. Par exemple, lorsque l’allocation dynamique de mémoire échoue, il est généralement renvoyéNULL。NULLIl est également utilisé pour initialiser des variables pointeurs, indiquant qu’elles ne pointent actuellement vers aucune adresse valide.
Exemple
L’exemple suivant illustre l’utilisation de la macro NULL.
Exemple 1
#include <stddef.h>
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("Fichier file.txt ouvert avec succès\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("Impossible d’ouvrir le fichier nofile.txt\n");
}
return(0);
}
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("Fichier file.txt ouvert avec succès\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("Impossible d’ouvrir le fichier nofile.txt\n");
}
return(0);
}
Supposons que le fichierfile.txtexiste déjà, mais quenofile.txtn’existe pas. Compilons et exécutons le programme ci-dessus, ce qui produira les résultats suivants :
成功打开文件 file.txt 不能打开文件 nofile.txt
allocation dynamique de mémoire :
Exemple
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
printf("Échec de l'allocation mémoire\n");
return 1;
}
// Utiliser la mémoire allouée
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
// Libérer la mémoire allouée
free(ptr);
ptr = NULL; // Définir le pointeur sur NULL
return 0;
}
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int) * 10);
if (ptr == NULL) {
printf("Échec de l'allocation mémoire\n");
return 1;
}
// Utiliser la mémoire allouée
for (int i = 0; i < 10; i++) {
ptr[i] = i;
}
// Libérer la mémoire allouée
free(ptr);
ptr = NULL; // Définir le pointeur sur NULL
return 0;
}
Paramètres de fonction :
Exemple
#include <stdio.h>
#include <string.h>
void printString(const char *str) {
if (str == NULL) {
printf("La chaîne est NULL\n");
} else {
printf("Chaîne : %s\n", str);
}
}
int main() {
char *string1 = "Bonjour, le monde !";
char *string2 = NULL;
printString(string1); // Sortie : Chaîne : Bonjour, le monde !
printString(string2); // Sortie : La chaîne est NULL
return 0;
}
#include <string.h>
void printString(const char *str) {
if (str == NULL) {
printf("La chaîne est NULL\n");
} else {
printf("Chaîne : %s\n", str);
}
}
int main() {
char *string1 = "Bonjour, le monde !";
char *string2 = NULL;
printString(string1); // Sortie : Chaîne : Bonjour, le monde !
printString(string2); // Sortie : La chaîne est NULL
return 0;
}
Notes
NULLC'est la façon standard de représenter un pointeur nul, en évitant l'utilisation directe de0ou(void*)0, afin d'améliorer la lisibilité et la maintenabilité du code.- Lors de la comparaison de pointeurs, vous devez utiliser
NULL, plutôt que d'utiliser directement0。 - En C++, vous pouvez utiliser
nullptrà la placeNULL, afin de fournir une vérification de type plus stricte.
Informations connexes
- Dans la norme C++11, il a introduit le
nullptrmot-clé, comme une constante de pointeur nul plus sûre au niveau des types. NULLLa définition de la macro NULL peut varier légèrement selon le compilateur et l'implémentation de la bibliothèque standard, mais sa signification et son objectif restent les mêmes.