caractère (s) null ignoré activé par défaut

J’essaye d’implémenter la stack avec la masortingce! Chaque fois que j’exécute le programme fonctionne correctement, mais je reçois un avertissement, car les caractères nuls ignorés sont activés par défaut.

Qu’est-ce que cet avertissement signifie? .. qu’est-ce que je fais mal?

Mon code est:

#include #include # define MAX 10 int top=-1; int arr[MAX]; void push(int item) { if(top==MAX-1) { printf("OOps stack overflow:\n"); exit(1); } top=top+1; arr[top]=item; }//warning int popStack() { if(top==0) { printf("Stack already empty:\n"); exit(1); } int x=arr[top]; top=top-1; return x; } void display() { int i; for(i=top;i>=0;i--) { printf("%d ",arr[i]); } return; } int peek() { if(top==-1) { printf("\nEmpty stack"); exit(1); } return arr[top]; } int main() { int i,value; printf(" \n1. Push to stack"); printf(" \n2. Pop from Stack"); printf(" \n3. Display data of Stack"); printf(" \n4. Display Top"); printf(" \n5. Quit\n"); while(1) { printf(" \nChoose Option: "); scanf("%d",&i); switch(i) { case 1: { int value; printf("\nEnter a value to push into Stack: "); scanf("%d",&value); push(value); break; } case 2: { int p=popStack(); printf("Element popped out is:%d\n",p); break; } case 3: { printf("The elements are:\n"); display(); break; } case 4: { int p=peek(); printf("The top position is: %d\n",p); break; } case 5: { exit(0); } default: { printf("\nwrong choice for operation"); } } } return 0; }//warning 

J’utilise Dev C ++ IDE.

Quelque part dans votre fichier de code source, vous avez un caractère avec la valeur d’octet 0 (le caractère ASCII NUL ). Ce qui sera invisible dans la plupart des éditeurs de texte.

Le compilateur (gcc) vient de vous dire qu’il a ignoré ce caractère – ce qui ne devrait vraiment pas se trouver dans votre code source.

Vous pouvez ouvrir votre fichier dans un éditeur hexadécimal, déterminer où se trouve ce caractère et le corriger, ou supprimer votre fichier source et le copier-coller à partir du code que vous avez posté ici.

Si vous voyez un grand nombre de ces avertissements de caractère null, considérez les possibilités suivantes. Le problème pouvait être causé par une personne créant le fichier source à l’aide d’un éditeur enregistrant le fichier au format Unicode 16 bits.

Pour résoudre ce problème (sous Linux), aucun éditeur hexadécimal n’est nécessaire. Ouvrez simplement le fichier dans l’éditeur geany (d’autres éditeurs peuvent également le supporter). Vérifiez les propriétés du fichier pour voir l’encodage. S’il s’agit d’un UTF / UCS 16, vous pouvez le changer en UTF8 dans le menu Document. Il convient probablement de supprimer la nomenclature, le cas échéant.

Dans ce cas, il faut s’attendre à une erreur, car un codage UCS16 de caractères compris dans la plage ASCII fera en sorte que chaque octet sur deux soit un caractère nul.

Comme d’autres l’ont déjà dit, l’avertissement signifie qu’il y a des octets nuls dans votre code source.

Cela peut arriver, par exemple, lorsque vous essayez de comstackr sous Linux un code initialement écrit sous la forme d’un projet Visual Studio sous Windows, qui l’enregistre par défaut au format UTF-16. Puisque g ++ s’attend à ce que les fichiers sources soient au format UTF-8, il finit par lire des octets nuls.

Dans mon cas, la solution la plus simple était de convertir l’encodage à l’aide de iconv (Linux).

 iconv myfile -f UTF-16 -t UTF-8 > myfile 

Vous pouvez vérifier le codage d’un fichier avec le fichier

 file myfile