Динамический путь файла fopen в C - PullRequest
1 голос
/ 06 февраля 2011
char filePath[200];   
printf("Enter filepath: \n");
fgets(filePath, 200, stdin);
f = fopen(filePath, "r");   

while(!feof(f)) // crashed on this line
{

}

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

Не могли бы вы посоветовать правильный способ написания кода для открытия пути к файлу, указанного пользователем в командной строке?

Спасибо, Freddy

Ответы [ 4 ]

2 голосов
/ 06 февраля 2011

fopen(3) возвращает NULL, если не удается открыть файл. Вы должны всегда проверять это. fgets(3) делает это тоже, но ваша проблема, вероятно, в символе новой строки, который он сохраняет в возвращаемой строке.

0 голосов
/ 06 февраля 2011

Вы проверяете код ошибки из fgets и fopen.Оба возвращают ноль, если они потерпели неудачу

0 голосов
/ 06 февраля 2011

Попробуйте что-то вроде:

size_t l = strlen(filePath);
if (filePath[l-1] == '\n') filePath[--l-1] = 0;
if (filePath[l-1] == '\r') filePath[--l-1] = 0;
0 голосов
/ 06 февраля 2011

fgets помещает конец строки в конец строки (\ r \ n в Windows). Таким образом, ваш filePath содержит мусор в конце, и файл с таким именем не существует. Я бы рекомендовал использовать scanf("%[^\r\n]s", filePath) вместо этого. (scanf может отличаться в некоторых реализациях, пожалуйста, прочтите вашу документацию.)

обновление: Вы также должны убедиться, что не будет переполнения буфера, указав размер буфера. Например, так:

char filePath[100];
scanf("%99[^\r\n]s", filePath);
...