2017-01-30 18 views
-1

我比较字符串的两个数组,但程序比较一些字符串后异常终止:比较字符串时,下面的程序异常终止?

output of program

什么是错我的代码?

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; 
} 
+4

为什么这么多问号? 。 –

+0

'字符* B [Q];'必须的scanf( “%d” 之后','&Q);我 – BLUEPIXY

+0

输出attched图像 –

回答

3

分配STRCMP的结果为不同的变量名称,而不是“我”,因为“我”是你的外循环变量,但我的b[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"); 
} 
+3

@Clifford''的b i' [I]'不是外可变 – BLUEPIXY

+0

@BLUEPIXY:删除的评论 - 卫生署。 !代码有这个问题和其他问题。 – Clifford

3

截至b[Q]Q声明初始化 - 在此之后可能发生任何事情。您至少需要将b[]的声明更改为Q

可能有其他的问题 - 而这仅仅是一个显而易见的。

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,这不是一个问题。

+1

我怀疑这就是问题所在,在C99变长数组(VLA)是有效的。虽然在这个没有最大检查用户输入的这种情况可能是不明智的。该VLA'b [ Q]'与Q单元化是更大的关注。 – Clifford

+0

同意你@ @ Clifford ... – theadnangondal