两条相同的链在 C 中不认为自己是平等的

Two identical chains do not identify themselves as equals in C

我有两个字符串,一个是文件的第一行(即 "WORKING"),第二个是单词 "WORKING"。问题是,当我尝试将它们放入 IF 时,它说它们不一样!

我尝试用 printf 命令读取它们,但它们是一样的。我也试过在第二个字符串中使用 '\n' 但没有任何变化。

代码如下,请看:

FILE *fl;
fl=fopen("test.txt", "r");
char line_working[100];
fscanf(fl, "%s\n", line_working);
fclose(fl);
printf("%s", line_working);              //HERE IT PRINTS: WORKING
char* workinger="WORKING";
printf("\n%s", workinger);               //HERE IT ALSO PRINTS: WORKING
getch();
if(workinger==line_working){
    printf("OK");
    getch();
}

什么也没发生...

==比较指针地址。

要比较以 null 结尾的字符数组(又名 C 字符串),请使用 strcmp:

if(strcmp(workinger, line_working) == 0)
if(workinger==line_working){

比较指针。

workinger 是一个指针,表达式(比较)中使用的数组 line_working 被转换为指向其第一个元素的指针,等于 &line_working[0]。所以它确实地址比较。但这不是你想要的。不幸的是,这种比较在 C 中是完全有效的。所以编译器在这里帮不了你。

使用strcmp()比较C字符串。

您的代码不会比较您正确尝试比较的字符串与结果应该相等的假设,而是比较存储字符串的内存位置。通过使用“==”,您可以比较 workerer 的值(这是一个指针,因此变量值是内存地址)和 line_working(这是一个数组,因此对应的值等于第一个元素的内存地址)

if (workinger==line_working)

要比较存储在相应内存位置的字符串,您应该使用字符串比较函数(请参阅此问题 How do I properly compare strings?