切换到Linux环境,现在fscanf不起作用

时间:2011-07-04 18:17:36

标签: linux portability qt-creator scanf

我有一个在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

1 个答案:

答案 0 :(得分:1)

您的数据文件在哪里创建?有没有机会它有DOS风格的换行符(CR + LF)而不是Unix换行符?

如果这是问题所在,那么文本模式(fopen(fname, "rt"))可能会有所帮助,或者您可以通过dos2unix实用程序(仅在某些Linus发行版上d2u)运行该文件。