我正在比较两个字符串数组,但程序在比较一些字符串后异常终止:
我的代码出了什么问题?
int main()
{
int N,Q;
printf("Enter no. of strings:");
scanf("%d",&N);
char *a[N],*b[Q],k[50],*p;
int len;
//scanning first array of strings
for(int i=0;i<N;i++)
{
scanf("%s",k);
len=strlen(k);
p=(char*)malloc((len+1)*sizeof(char));
strcpy(p,k);
a[i]=p;
}
printf("no. of Query:");
scanf("%d",&Q);
//scanning second array of strings
for(int i=0;i<Q;i++)
{
scanf("%s",k);
len=strlen(k);
p=(char*)malloc((len+1)*sizeof(char));
strcpy(p,k);
b[i]=p;
}
***//comparing both the arrays of strings***
for(int i=0;i<Q;i++)
{
for(int j=0;j<N;j++)
{
int i=strcmp(a[j],b[i]);
printf("%d\t",i);
}
printf("\n");
}
return 0;
}
答案 0 :(得分:3)
将strcmp的结果分配到不同的变量名称而不是&#39; i&#39; 因为&#34; i&#34;是你的外部循环变量,但是b[i]
的i在堆栈中
for(int i=0;i<Q;i++)
{
for(int j=0;j<N;j++)
{
int i=strcmp(a[j],b[i]);
printf("%d\t",i);
}
printf("\n");
}
答案 1 :(得分:3)
在初始化b[Q]
Q
的声明时,任何事情都可能在此之后发生。在您指定b[]
之前,您至少需要移动Q
的声明。
可能还有其他问题 - 这只是显而易见的问题。
答案 2 :(得分:1)
您正在输入字符串的数量而未正确使用它。您应该使用动态内存分配。使用 malloc
printf("Enter no. of strings:");
scanf("%d",&N);
和
char *a[N]
应该在哪里
a = malloc(sizeof(char*) * N);
并在返回前释放它以避免记忆韭菜。 I am not sure that this is the problem but this can be a step in the right direction.
基于@Clifford评论编辑:C99标准允许这样做,如果您的编译器支持C99,这不是问题。