我有一个问题,从二进制文件与char文件比较字符串,我不知道如何解决(我是非常新的cpp)。
我有这段代码来创建一个dll:
char text[5];
DLL_EXPORT char *LIMGcheck(char *archivo){
FILE *origen = fopen(archivo, "r");
if(origen){
if(_fseeki64(origen, 0, SEEK_END)){
fclose(origen);
return "-1";
}else{
if(_fseeki64(origen, _ftelli64(origen)-16384, SEEK_SET)){
fclose(origen);
return "-1";
}else{
fread(text, sizeof(char), 4, origen);
fclose(origen);
//return text;
if (strncmp(text, "LIMG", 3)){
return "1";
}else{
//MessageBoxW(NULL, L"No tiene LIMG", L"AVISO:", MB_OK);
return "0";
}
}
}
}else{
return "-1";
}
}
如果我使用"return text;",那么程序返回一个带有"LIMG"文本的字符串,但是当我尝试与字符串进行比较时,我总是得到false。我尝试过:text == "LIMG", text == LIMGText(包含"LIMG"的字符变量)和strncmp,并且总是得到相同的结果。
提前感谢,也许是愚蠢的,但我对cpp太陌生了;)
Try
if (strncmp(text, "LIMG", 4) == 0) {
strcmp
族返回一个排序;如果匹配,它们返回0。你不能使用==
进行字符串内容比较,因为它将比较字符串指针而不是内容。
你的代码也有点难以理解。你可以考虑删除所有的else语句,并将这些代码放在顶层,这样在假设整个过程中都没有错误的情况下,更容易阅读程序流。
对于字符串返回,您还依赖于缓冲区中的第五个字符始终为0。如果它是一个全局初始化的缓冲区,就像这里一样,这将是正确的,但一般来说,如果你从流中复制四个字符,那么最安全的做法是自己显式地以零结束它。