2013-06-20 75 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