C语言中字符数组的if else相等判断不生效如何解决?
问题原因
- C语言中直接使用
==比较两个字符串时,实际对比的是两个字符串的内存起始地址,而非字符串的内容:array[0]是你定义的二维字符数组中第一行元素的起始地址,位于栈内存区域- 字面量
"-"存储在程序的常量数据区,二者的内存地址完全不同,因此==判断永远为假,只会执行else分支
- 额外注意:你代码里的换行符存在笔误,
/n是错误写法,正确的换行转义符是\n
可行解决方案
方案1:使用strcmp函数对比字符串内容
需要引入<string.h>头文件,strcmp函数会逐字节对比两个字符串的内容,两个字符串完全相等时返回0:
#include <stdio.h> #include <string.h> int main() { char array[2][2] = {"-", "+"}; printf("%s", array[0]); if(strcmp(array[0], "-") == 0){ printf("Its a minus\n"); } else{ printf("\nNothing"); } return 0; }
方案2:直接对比单个字符(适配当前场景的更高效方案)
由于你存储的都是单字符的字符串,直接取数组对应位置的单个字符对比即可,不需要调用字符串处理函数:
#include <stdio.h> int main() { char array[2][2] = {"-", "+"}; printf("%s", array[0]); if(array[0][0] == '-'){ printf("Its a minus\n"); } else{ printf("\nNothing"); } return 0; }
内容的提问来源于stack exchange,提问作者user17356156
相关产品推荐
相关产品推荐

