我有一个在Windows中使用Visual Studio和CodeBlocks编译的程序,但是当我使用QT Creator在Kubuntu中编译它时,fscanf函数的工作方式不同。
我有一个包含其他文件名称的文件,每个文件都用空格和换行符分隔。在工作环境中使用带有“%s”的fscanf将文件名读入char entity[21]
,在此测试用例中,它保存“ent001.txt”并以空字节结尾。然而,在linux中,entity [0]有“-74 / 182”然后是几个空字节,然后是几个不在文件中的东西被读取,没有一个是字母。 Fscanf返回-1。
可移植性是否存在更深层次的问题,或者我的标准库是否有点失效?
编辑:对于一些示例代码:
fin = fopen( levelfile, "r" ) ;
test = fscanf(fin, "%s", entity ) ;
其中'levelfile'是'char * levelfile [21]',其值现在是硬编码的。测试是一个'int'来查找返回值。 'fin'不等于null。
EDIT2:级别文件中xxd的输出:
0000000: 656e 7430 3031 2e74 7874 200a 656e 7430 ent001.txt .ent0
0000010: 3032 2e74 7874 2024 200a 5472 6967 6765 02.txt $ .Trigge
0000020: 7230 3031 2e74 7874 2024 200a 3020 3531 r001.txt $ .0 51
0000030: 3220 3531 3220 3020 0a31 2037 3132 2037 2 512 0 .1 712 7
答案 0 :(得分:1)
您的数据文件在哪里创建?有没有机会它有DOS风格的换行符(CR + LF)而不是Unix换行符?
如果这是问题所在,那么文本模式(fopen(fname, "rt")
)可能会有所帮助,或者您可以通过dos2unix
实用程序(仅在某些Linus发行版上d2u
)运行该文件。