strcmp在c中返回相同的值

时间:2015-01-12 22:50:42

标签: c gcc strcmp

所以在这里我编写了这个程序,它产生了两组与它们相连的编号单词,所以稍后我们可以通过组合这些集合中的单词(每个单独设置)生成单词,每次我们生成这两个单词时,如果这些单词比较它们是相同的,如果它结束程序。

strcmp不能正常工作,我不明白为什么:... C. 能帮帮我吗

我在Ubuntu 14.04 LTS上使用code :: blocks 当然这里是代码:

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

#define LISTSIZE 256
#define CHAINSIZE 64

int main()
{
char listA[LISTSIZE][CHAINSIZE], listB[LISTSIZE][CHAINSIZE]; //i know malloc would be nice here but it's not really important here
int j = 0, i = 0, n;
printf("Podaj wartość indeksu i: ");
scanf("%d", &i);

for(j = 0 ; j < i; j++)
{
    printf("Podaj łańcuch do listy A: "); //enter chain to list A
    scanf("%s", &listA[j]);

}
for( j = 0; j < i; j++)
{
    printf("Podaj łańcuch do listy B: "); //enter chain to list B
    scanf("%s", &listB[j]);
}
printf("Ile chesz podać indeksów? "); //how much indexes do you like to choose
scanf("%d", &n);
for (j = 0; j < n; j++)
{
    printf("\nWpisz index", j); //enter index
    scanf("%d", &i);
    strcat(listA[LISTSIZE - 1], listA[i - 1]);
    strcat(listB[LISTSIZE - 1], listB[i - 1]);
    printf("\nslowo A: %s", listA[LISTSIZE - 1]);
    printf("\nslowo B: %s", listB[LISTSIZE - 1]);
    printf("\n %d", strcmp(listA[LISTSIZE - 1], listB[LISTSIZE - 1])); //just to check
// here i have a problem
    if(strcmp(listA[LISTSIZE - 1], listB[LISTSIZE - 1]) == 0)
    {
        printf("\tRozwiązanie zostało znalezione!\n");
        return 0;
    }
}
printf("Nie znaleziono rozwiązania"); //no solution was found
return 0;
}

2 个答案:

答案 0 :(得分:1)

listAlistB应初始化为strcat(listA[LISTSIZE - 1], listA[i - 1]);strcat(listB[LISTSIZE - 1], listB[i - 1]);

char listA[LISTSIZE][CHAINSIZE]={0}, listB[LISTSIZE][CHAINSIZE]={0};

scanf("%s", listA[j]);
...
scanf("%s", listB[j]);

答案 1 :(得分:0)

这是你的问题

scanf("%s", &listA[j]);

删除&

scanf("%s", listA[j]);

scanf("%s", &listA[j][0]);

并修复listB案例。

此外,不要像这样调用scanf,通过执行

来防止缓冲区溢出
scanf("%63s", listA[j]);

并检查scanf的返回值,如果不检查,则可能会调用未定义的行为。