Abh*_*dey 2 c string comparison-operators
我是C初学者,我不明白为什么这段代码不起作用?
void main(){
char userInput = "a";
if(userInput == "a"){
printf("a");
} else printf("b");
getch();
}
Run Code Online (Sandbox Code Playgroud)
返回"b"
但这一个正在发挥作用
void main(){
char userInput;
if("a" == "a"){
printf("a");
} else printf("b");
getch();
}
Run Code Online (Sandbox Code Playgroud)
返回"a"
有什么不同?
表示"a"为的字面值是字符串文字.基本类型是chars 的数组,如char [size].它不是兼容的类型char,因此赋值
char userInput = "a";
Run Code Online (Sandbox Code Playgroud)
无效.
你想使用一个字符常量,你写的东西就像
char userInput = 'a';
Run Code Online (Sandbox Code Playgroud)
也就是说,if("a" == "a")似乎在您的情况下有效,但它并不像您认为的那样.它不比较内容,而是比较字符串的基地址(第一个元素的地址),在您的情况下,它们似乎是相同的.您的编译器碰巧使用相同的内存位置来获得相同的字符串文字(优化) - 因此您会看到一个真实的结果,但标准并不能保证这一点.一个(ny)编译器可以自由选择它自己的内存分配策略,有或没有优化过程.
使用gcc,如果-fno-merge-constants用作编译选项,则此条件应该评估为falsy.
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |