Sur*_*uri 1 c++ string comparison
"some" == "some\0"和strcmp("some","some\0")c ++ 之间有什么区别 ?
为何if("some" == "some\0")返回false并if(!strcmp("some","some\0"))返回true?
"some" == "some\0"
Run Code Online (Sandbox Code Playgroud)
比较字符串文字的地址.这些文字存储在不同的内存位置.所以永远false.
!strcmp("some","some\0")
Run Code Online (Sandbox Code Playgroud)
比较字符串的内容.因此在这种情况下"some\0"是相同的"some".所以true.
编辑:从你的意见,你问为什么"some" == "some"是true.这是因为大多数编译器足够聪明,可以重用字符串文字(当它们存储在只读区域时).这就是它返回的原因true.
PS在下面的情况下,"some"不会以只读方式存储:
char a[] = "some";
Run Code Online (Sandbox Code Playgroud)
请参见下图.它在内存中显示两个字符串,它们的内容在框中,在框旁边,您将看到每个字符串的地址.

当你在做的时候,if("some" == "some\0")你正在比较地址.它被翻译成if (0xdeadbeef == 0x0badcafe)显然是错误的.
使用时strcmp,比较每个框的内容,直到达到每个框的内容\0.这就是第二次测试返回true的原因.
如果您将第一个测试更改if("some" == "some")为编译器may potentially,则会看到它们是相同的字符串,并且只存储一次.这意味着你的测试将转变为if (0x0badcafe == 0x0badcafe)显然是真的.
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |