两条相同的链在 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?)
我有两个字符串,一个是文件的第一行(即 "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?)