2013-01-04 128 views
2

我正在試驗指針和字符串。在下面的代碼中,所有的東西都經過測試(你可以自己編譯和運行),但是當我試圖使用strcmp時,我一直崩潰。該代碼在代碼塊中運行時沒有警告。你能指出我的錯誤,使程序崩潰?比較字符串與strcmp崩潰

#include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h> 

    int main() 
    { 
     int choice,x=7,k,q,cmp,j=0,i=0,N; 
     char v[5],str[80],c[5]; 
     char *B[11][2]= 
     {"-----","0", 
     ".----","1", 
     "..---","2", 
     "...--","3", 
     "....-","4", 
     ".....","5", 
     "-....","6", 
     "--...","7", 
     "---..","8", 
     "----.","9", 
     NULL,NULL}; 

     printf("Give a stream"); 
     if(gets(str)) printf("%s\n",str); 
     fflush(stdin); 
     i=0; 
     while(str[i]) 
     { 
      q=0; 
      j=i+1; 
      while(q%5!=0) 
      { 
       v[j]=str[j]; 
       puts(v); 
       j++; 
       q++; 
      } 
      printf("Hello"); 
      for(k=0; k<11; k++) 
      { 
       strcpy(c,B[k][0]); 
       printf("%s",c); 
       x=strcmp(v,c); 
       //Problem: 
       printf("%d",c); 
       if(x==0) printf("hi"); 
      } 
      i=i+1; 
      j++; 
     } 
    } 
+0

'fflush(stdin);'是未定義的行爲。 – chris

+2

這聽起來像是學習如何使用調試器的時間... –

+0

這並不一定解決問題,但v [6],c [6]和v [5] = c [5] ='\ 0 「;將是必需的。 –

回答

1

你沒有填寫v的數據。從q == 0開始,條目while(q%5!=0)在輸入時爲false。這使得v未初始化,即包含垃圾。

1

你正在做的:

strcpy(c,B[k][0]); 

現在c聲明爲:

char c[5]; 

B[k][0]有5個字符。既然你想c是一個NUL終止字符數組,你必須有空間來容納NUL字符,並使用strncpy

+0

C中的數組從0開始。因此,我將0個特徵放在0-4中,然後我將在位置5處放置一個NULL。 – alex777

+0

@ alex777:您沒有第5個位置,大小爲5的數組。 – codaddict

+0

是你是對的!抱歉 – alex777

1

這個程序會在k = 10時轉儲,因爲B [10] [0] = NULL.strcpy(char * dest,const char * src)會在src = null時轉儲。