我正在使用if条件比较字符串,但第二个if条件失败。在这些比较情况下,失败的原因是什么,编译器级别会发生什么?
char *c = "test";
char a[] = "test";
if(c=="test")
{
printf("Hain");
if(a=="test")
printf("Byen");
}
在第一次比较中,您应该收到警告:
警告:未指定与字符串文本的比较结果
但是它返回true
因为您正在比较两个指向字符串文字的指针,据我所知,女巫总是相同的。 采用以下代码:
#include <stdio.h>
#include <string.h>
int main(void) {
char *c = "test";
char a[] = "test";
printf("%pn%pn%p", c, a, "test");
}
结果将是:
0x4005f4
0x7ffedb3caaf3
0x4005f4
如您所见,指针确实相同。
也就是说,==
C 中不用于比较字符串,您应该使用strcmp()
.
#include <stdio.h>
#include <string.h>
int main(void) {
char *c = "test";
char a[] = "test";
if(!strcmp(c, "test"))
{
printf("Hain");
if(!strcmp(a, "test"))
printf("Byen");
}
}