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