fscanf - использование слишком длинной строки - PullRequest
1 голос
/ 05 июня 2009

символ сначала [10];

символьная секунда [10];

Что означает fscanf (fr, "% s% s \ n", first, second); делать, когда первая строка слишком длинная?

могу ли я сначала использовать только char * без malloc? а указатель покажет на строку?

Ответы [ 3 ]

3 голосов
/ 05 июня 2009

Вы можете использовать ширину (то есть "% 9s"), чтобы ограничить размер строки. Например, см. документацию Microsoft .

Использование указателя без его инициализации - верный способ вызвать сбой вашей программы или ее плохое поведение

2 голосов
/ 05 июня 2009

Если вы используете glibc, вы можете решить обе проблемы за один раз - используйте спецификатор формата %as.

Он автоматически выделит строку, достаточно большую для хранения содержимого.

Как это:

char *first, *second;

scanf(fp, "%as %as\n", first, second);

Примечание: это расширение GNU!

1 голос
/ 05 июня 2009

Когда первая строка слишком длинная, вы сталкиваетесь с проблемой переполнения буфера .

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

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