fread () помещает странные вещи в массив char - PullRequest
2 голосов
/ 24 февраля 2012

У меня есть файл, который я хочу прочитать и распечатать на экране.Я использую XCode в качестве моей IDE.Вот мой код ...

fp=fopen(x, "r");
char content[102];
fread(content, 1, 100, fp);
printf("%s\n", content);

Содержимое файла: "Бекон!"Он печатает: \254\226\325k\254\226\234.

. Я все время гуглил для этого ответа, но документация для файлового ввода / вывода в C кажется скудной, а то, что есть, не очень понятно.(Для меня по крайней мере ...)

РЕДАКТИРОВАТЬ: я переключился на просто чтение, не добавление и чтение, и переключил два средних аргумента в fread().Теперь он печатает Bacon!\320H\320 Что означают эти вещи?Вещи, как в обратной косой черте номер номер или буква.Я также переключил способ распечатать его как предложено.

Ответы [ 4 ]

9 голосов
/ 24 февраля 2012

Вы открываете файл для добавления и чтения .Вы должны открыть его для чтения или переместить указатель чтения в место, откуда вы собираетесь читать (я полагаю, начало).

FILE *fp = fopen(x, "r");

или

FILE *fp = fopen(x, "a+");
rewind(fp);

Кроме того, fread(...) не завершает вашу строку нулем, поэтому вы должны завершить ее перед печатью:

size_t len = fread(content, 1, 100, fp);
content[len] = '\0';
printf("%s\n", content);
2 голосов
/ 24 февраля 2012

Полагаю, вы имели в виду это:

printf("%s\n", content);
1 голос
/ 24 февраля 2012

Может быть:

fp = fopen(x, "a+");
if(fp)
{
    char content[102];
    memset(content, 0 , 102);

    // arguments are swapped.
    // See : http://www.cplusplus.com/reference/clibrary/cstdio/fread/
    // You want to read 1 byte, 100 times
    fread(content, 1, 100, fp);

    printf("%s\n", content);
}
0 голосов
/ 24 февраля 2012

Возможная причина в том, что вы не завершаете прочитанные данные, поэтому printf печатает буфер до тех пор, пока он не найдет ограничитель строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...