Перешли на среду Linux, теперь fscanf не работает - PullRequest
0 голосов
/ 04 июля 2011

У меня есть программа, которая работает при компиляции в Windows как с Visual Studio, так и с CodeBlocks, но когда я компилирую ее в Kubuntu с использованием QT Creator, функции fscanf не работают одинаково.

У меня есть файл, содержащий имена других файлов, каждый из которых разделен пробелом и переводом строки. При использовании fscanf с «% s» в рабочих средах имя файла читается в 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' не равно нулю.

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 Ответ

1 голос
/ 04 июля 2011

Где был создан ваш файл данных?Есть ли вероятность, что вместо новой строки Unix есть разрывы строк в стиле DOS (CR + LF)?

Если в этом проблема, может помочь текстовый режим (fopen(fname, "rt")) или вы можете запустить файл через *Утилита 1004 * (просто d2u в некоторых дистрибутивах Linus).

...