C - 文件输入/验证 LINUX/Windows 问题


FILE *f;
char buffer[201];   
f=fopen("file.txt","r");
if (f==NULL)
{ 
    printf("file doesn't exist?!n");return 1;
}
while(1)
{
    if ((fgets(buffer, 200, f) == NULL)) 
        break;
    instruction = validatehex(buffer);
    if(instruction == - 1) 
        continue;
    PC += 4;
    Decode(instruction,verbose);
}

上面的代码逐行从文件获取输入以验证它。问题在于 validatehex 函数,即使值正确,它也总是打印"不正确"。这段代码在Windows中100%完美,而不是在linux(Ubuntu(中。

uint32_t validatehex(char input[])
{
    char hexchars[] = "1234567890abcdefABCDEF";
    uint32_t hexvalue = 0;
    char last;
    if((strlen(input) != strspn (input,hexchars)) && ((strlen(input)-1 != strspn (input,hexchars)) &&  input[8] != ''))
    {
        printf("NO CORRECTn"); 
        return INERR;
    }
    sscanf(input,"%08x",&hexvalue);
    return hexvalue;
}

我已经尝试过使用 mingw32 c 编译器跨窗口,它工作得很好。它从中读取的文件仅由十六进制值组成,每行长 8 位数字。

任何人都可以看到代码出错的地方吗?或者为什么它在Linux中的工作方式不同?

Linux 和 Windows 使用

不同的行尾标记:Windows 使用 rn,而 Linux 使用 n 。 您的文件使用哪种换行符?

如果您正在读取在 Linux 上的 Windows 中编写的文件,您将在字符串末尾获得一个额外的r

这是避免此问题的一种方法:

int len = strlen(input);
if (input[len-1] == 'r') input[len-1] = '';

最新更新