8

我正在尝试用数组实现堆栈!每次我执行程序时运行良好,但我收到警告,因为默认情况下已忽略空字符

这个警告是什么意思?..我做错了什么?

我的代码是:

#include<stdio.h>
#include<stdlib.h>
# 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

我正在使用开发 C++ IDE。

4

3 回答 3

19

如果您看到大量这些空字符警告,请考虑以下可能性。该问题可能是由于有人使用将文件保存为 16 位 Unicode 的编辑器创建源文件所致。

要解决这个问题(在 Linux 上),不需要十六进制编辑器。只需在 geany 编辑器中打开文件(其他编辑器也可能支持此功能)检查文件属性以查看编码,如果它是 UTF/UCS 16,那么在“文档”菜单中您可以将其更改为 UTF8。如果也有 BOM,则可能值得删除 BOM。

在这种情况下,错误是意料之中的,因为 ASCII 范围内的字符的 UCS16 编码将使每个第二个字节为空字符。

于 2013-10-30T08:59:28.927 回答
13

在您的源代码文件中的某处,您有字节值为 0 的字符(ASCII NUL字符)。这在大多数文本编辑器中是不可见的。

编译器 (gcc) 只是告诉您它忽略了该字符 - 您的源代码中确实不应该存在该字符。

您可以在十六进制编辑器中打开您的文件,找出该字符的位置并修复它,或者删除您的源文件并将其从您在此处发布的代码中复制粘贴回来。

于 2013-06-20T19:46:55.417 回答
5

正如其他人所说,警告意味着您的源代码中有空字节。

例如,当您尝试在 Linux 中编译最初编写为 Windows 中的 Visual Studio 项目(默认保存为 UTF-16)的代码时,可能会发生这种情况。由于 g++ 期望源文件采用 UTF-8 格式,因此它最终会读取空字节。

就我而言,最简单的解决方案是使用 iconv (Linux) 转换编码

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

您可以使用文件检查文件的编码

file myfile
于 2018-01-12T04:20:33.080 回答