2015-02-02 6 views
0

Я пытаюсь работать с файлами в C. Когда я вводил имя файла по командной строке, он работает, но когда я пытаюсь ввести имя файла на стандартный ввод, он не работает. Вот мой код:Ошибка при работе с файлами

int main() 
{ 
    FILE * input; 
    char fileName[100]; 
    printf("Enter file name\n"); 
    scanf("%c",fileName); 
    input=fopen(fileName,"r"); 
    readData(input); 
    return 0; 
} 

я запускаю этот код this-

gcc temp.c -o exe 
./exe 
Enter file Name 
input.txt 

Это дает эту ошибку:

File not found or unable to read 
Segmentation fault (core dumped) 

Но это работает:

int main(int argc,char *argv[]) 
{ 
    FILE * input; 

    input=fopen(argv[1],"r"); 
    readData(input); 
    return 0; 
} 

I запустите этот код следующим образом:

gcc temp.c -o exe 
/exe input.txt 

Почему возникает первое сообщение об ошибке?

+3

'scanf ("% c ", fileName);' -> 'scanf ("% 99s ", fileName);' – chux

+0

@chux Спасибо, что это сработало. – Coder

ответ

4

Обратите внимание, эта линия

scanf("%c", fileName); 

%c формат строки принимает только единый характер. Чтобы прочитать целую строку, используйте строку формата %s.

1

Прежде всего

scanf("%c",fileName); 

вы пытаетесь прочитать ни одного charcter. попробуйте

scanf("%s",fileName); 

инициализация Также ваш массив с нулями

char fileName[100] = {0}; 
2

scanf("%c",fileName); читает 1 char и сохраняет это в fileaName. На данный момент fileaName представляет собой массив из char с его начальным char. Это не строка : массив char вплоть до завершающего '\0'.

fopen(fileName,"r"); ожидал строку в fileName, но эта переменная не была должным образом заполнена. Таким образом, ошибка «Файл не найден или не читать ошибку сегментации (ядро сбрасывали)»

Использование scanf("%99s",fileName);

Это будет 1) пропускать ведущие пробельные как ' ', а затем 2) сохранить до 99 не- пробел char в fileName, наконец, добавление '\0'. 99 важно не переполнять fileName[100].

Смежные вопросы