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



我有一个程序,当使用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(。

相关内容

  • 没有找到相关文章

最新更新