Сохраните имя файла, заданное в командной строке, в динамически генерируемой строке - PullRequest
0 голосов
/ 24 октября 2011

Я пишу программу, которая получает имя-пути к файлу из командной строки, а затем переходит к открытию файла.Мой вопрос: возможно ли создать строку в тот момент, когда пользователь вводит данные, это будет именно тот размер, который необходим для того, чтобы путь к файлу вписался в нее?Если нет, то какой будет идеальный размер для нединамического массива символов, который мне придется использовать?

Я просто хочу избавиться от жестко запрограммированного размера строки:

char filename[100];
scanf(" %s", filename);

У него столько проблем.

Ответы [ 2 ]

1 голос
/ 24 октября 2011

В соответствии со стандартом C макрос FILENAME_MAX (определенный в stdio.h) определяет максимальную или рекомендуемую длину имен файлов (цитата: 222) If the implementation imposes no practical limit on the length of file name strings, the value of FILENAME_MAX should instead be the recommended size of an array intended to hold a file name string.).Я бы сказал, узнайте пределы длины имени файла вашей целевой ОС.

1 голос
/ 24 октября 2011

Посмотрите на scanf с помощью спецификатора формата %as. Он должен выделить буфер для вас, избавив вас от беспокойства о том, какой размер указать для буфера:

char *buf;
scanf("%as", &buf);

Из руководства Linux :

Необязательный символ 'a'. Это используется с преобразованиями строк, и освобождает вызывающего абонента от необходимости выделять соответствующий буфер удерживайте ввод: вместо этого scanf () выделяет буфер с достаточным размер, и назначает адрес этого буфера аргумент указателя, который должен быть указателем на переменную char * (это переменная не должна быть инициализирована перед вызовом). Звонящий должен впоследствии освободить (3) этот буфер, когда он больше не требуется. Это расширение GNU; C99 использует символ «а» в качестве преобразования спецификатор (и он также может использоваться как таковой в реализации GNU).

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