2015-04-13 5 views
0

У меня возникли проблемы в отношении FOPEN в С.Что касается FOPEN в C

Я этот код, который считывает конкретный файл из директории

FILE *ifp ; 
char directoryname[50]; 
char result[100]; 
char *rpath = "/home/kamal/samples/pipe26/divpipe0.f00001"; 
char *mode = "r"; 

ifp = fopen("director.in",mode); %director file contains path of directory 

while (fscanf(ifp, "%s", directoname) != EOF) 
{ 
strcpy(result,directoname); /* Path of diretory /home/kamal/samples/pipe26 */ 
strcat(result,"/");   /* front slash for path */ 
strcat(result,name);   /* name of the file divpipe0.f00001*/ 
} 

До этого момента мой код работает отлично создания строки который выглядит «/home/kamal/samples/pipe26/divpipe0.f00001».

Проблема возникает, когда я пытаюсь использовать «результат», чтобы открыть файл. Это дает мне ошибку. Вместо этого, если я использую «rpath», он отлично работает, хотя обе строки содержат одну и ту же информацию.

if (!(fp=fopen(rpath,"rb")))  /* This one works fine */ 
    { 
    printf(fopen failure2!\n"); 
    return; 
} 


    if (!(fp=fopen(result,"rb")))  /* This does not work */ 
    { 
    printf(fopen failure2!\n"); 
    return; 
    } 

Может кто-нибудь рассказать, почему я получаю эту ошибку?

+0

Вы должны * всегда * протестировать с ошибкой 'fopen' –

+1

Вы должны использовать' perror' или 'strerror' не просто' printf'on failure of 'fopen' –

+0

В этом вопросе на заднем плане есть конечное пространство строка. Распечатайте строку 'result' с двоеточиями с обеих сторон, чтобы убедиться, что у нее нет лишних пробелов (например, конечная новая строка). –

ответ

1

Я думаю, вы имеете в виду char result[100];; т.е. без звездочки. (Ditto for directoryname.)

Вы в настоящее время выделяете стек из массива из 100 указателей. Это не закончится хорошо.

Отметьте, что rpath и mode указывают на только для чтения память. Действительно, вы должны использовать const char* для этих двух литералов.

+0

Привет, я перекомпоновал код с 'char result [100]' и 'directoryname [100]' без указателей, но я все равно получаю ту же ошибку. благодаря – Bow

0

Ошибка в массиве 'char * result [100]', здесь вы выделяете массив из 100 указателей на строки, а не 100 байтов/символов, что было вашим намерением.

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