考虑下面的代码:当我在 mingw 64 下运行时,d->box 等于“jp2”,那么 br 也等于“jp2”。即它是空终止的。所以 strcmp 成功并返回 0。
在 Visual Studio 2012 下,scrncpy 不返回以空字符结尾的字符串。
strcmp 在这种情况下失败。但是,根据 strcmp 文档:
///////////////////////////////////////// ///////////////////
strcmp 比较两个字符串 比较 C 字符串 str1 和 C 字符串 str2。
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或到达终止空字符。
///////////////////////////////////////// /////////////////////
因此,strcmp 应该会成功,即使一个字符串以 null 结尾而一个字符串不是。
关于为什么会这样的任何想法?
char *br = (char*)malloc(5 * sizeof(char));
br = strncpy(br, (const char*)b->dbox, 4);
if(strcmp(br, "jp2\040")) {
println(INFO, "DOSEN'T Conform to IS 15444-1. Exiting");
return 1;
} else
println(INFO, "Conforms to IS 15444-1");