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] = ' ';