将字符串与strcmp-crash进行比较

时间:2013-01-04 11:19:11

标签: c string generics pointers

我正在尝试使用指针和字符串。在下面的代码中,所有内容都经过测试(您可以编译并运行自己),但是当我尝试使用时,我一直在崩溃 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++;
        }
    }

3 个答案:

答案 0 :(得分:1)

你在做:

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

现在c被声明为:

char c[5];

B[k][0]有5个字符。由于您希望c是NUL终止的char数组,因此您必须有空间来容纳NUL字符并使用strncpy

答案 1 :(得分:1)

您没有向v填充数据。自while(q%5!=0)以来,条件q == 0在输入时为false。这使v未初始化,即包含垃圾。

答案 2 :(得分:1)

当k = 10时,该程序将转储,因为当[src = null时,B [10] [0] = NULL.strcpy(char * dest,const char * src)将转储。