我有一个程序,当使用Visual Studio和CodeBlocks在Windows中编译时,但是当我使用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]',其值现在被硬编码。Test 是一个"int"来查找返回值。"fin"不等于空。
编辑 2:关卡文件上 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
您的数据文件是在哪里创建的? 它有没有可能使用DOS风格的换行符(CR + LF(而不是Unix换行符?
如果这是问题所在,那么文本模式(fopen(fname, "rt")
(可能会有所帮助,或者您可以通过dos2unix
实用程序运行文件(在某些Linus发行版上d2u
(。