strnpy在mingw和visual studio 2010中的表现不同



考虑下面的代码:当我在mingw 64下运行时,d->box等于"jp2 "那么br也等于"jp2 "。也就是说,它是空终止的。因此,strcmp成功并返回0。

在visual studio 2012下,scncpy不返回以空结尾的字符串。

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, "jp240")) {
    println(INFO, "DOSEN'T Conform to IS 15444-1. Exiting");
    return 1;
} else
    println(INFO, "Conforms to IS 15444-1");

strncpy()不会在两个系统上附加0字节(即不终止字符串),如果源长度等于或大于给定的限制(这里是4)。这意味着比较失败,因为-除非碰巧在内存中有一个0在br+4 - br的"字符串"大于4,因此不同。

修复未知字符串源的问题,将缓冲区的最后一个字节硬设置为0。

br = strncpy(br, (const char*)b->dbox, 4);
br[4] = '';

相关内容

  • 没有找到相关文章

最新更新