繁体   English   中英

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

[英]C - File Input/Validation LINUX/Windows Issue

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(而不是Linux(Ubuntu))中可以100%完美地工作。

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] != '\0'))
    {
        printf("NO CORRECT\n"); 
        return INERR;
    }

    sscanf(input,"%08x",&hexvalue);
    return hexvalue;
}

我已经使用mingw32 c编译器在Windows上进行了尝试,并且效果很好。 它从中读取的文件仅由每行8位数字的十六进制值组成。

谁能看到代码出了什么问题? 还是为什么它在Linux中的工作方式不同?

Linux和Windows使用不同的行尾标记:Windows使用\\r\\n而Linux使用\\n 您的文件使用哪种换行符?

如果要读取在Linux上用Windows编写的文件,则在字符串末尾会得到一个额外的\\r

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM