2013-06-20 133 views
2

我想实现堆栈与数组!每次我执行程序运行良好,但我得到警告作为空字符(S)被忽略默认启用空字符(S)忽略默认启用

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

我的代码是:

#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。

+0

当你说“我用的开发C编译器“,你的意思是说你使用的是Dev-C++ IDE? MinGW(编译器的gcc和g ++)自带了。 –

+3

该警告是否与其相关联? –

+0

我编辑了我的问题! – user2227862

回答

7

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

编译器(gcc)只是告诉你,它忽略了那个字符 - 这真的不应该出现在你的源代码中。

你可以在十六进制编辑器中打开你的文件,找出那个字符在哪里并修复它,或者删除你的源文件并复制粘贴回你从这里发布的代码。

9

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

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

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

0

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

例如,当您尝试在Linux中编译最初作为Windows中的Visual Studio项目编写的代码时,会默认保存为UTF-16。由于g ++预计源文件使用UTF-8,因此它最终会读取空字节。

对我来说,最简单的方法是用iconv的编码转换(Linux)的

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

您可以查看文件的编码,文件

file myfile