msc*_*msc 8 c string-literals undefined-behavior memcmp language-lawyer
我使用该memcmp函数比较了两个字符串文字.
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "abcd";
char str2[] = "ab";
if (memcmp(str1, str2, 4) == 0)
{
printf("equal string\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,str2比较短str1.这意味着str2访问字符串超出范围.
那么,这是不确定的行为吗?
Bat*_*eba 11
代码的行为未定义.memcmp一旦知道结果,C标准就不要求退货; 这是它并不一定必须在返回\0时相比'c',尽管价值'c' == '\0'是0由语言支持的任何字符编码.该标准也没有规定字典比较的顺序(尽管从一开始就不开始实施).
str2是一种char[3]类型.尝试访问第4个元素是可能的.
参考:http://en.cppreference.com/w/c/string/byte/memcmp
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |