2015-05-29 4 views
1

Я действительно запутался прямо сейчас. Я хочу создать файл и написать ему строку, которая была создана ранее. Но когда выполняется следующий код, происходит ошибка сбоя сегментации, и программа завершается.c - Дефекты сегментации при открытии файла

FILE* output; 
output = fopen("test.txt", "w"); 
fprintf(output, line); 
fclose(output); 

Линия заявлена ​​как следующая.

char* line = NULL; 
line = malloc(1048576 + 1); 

Сначала я считал, что ошибка возникает из-за таНос, но этот код не работает либо:

FILE* output; 
output = fopen("test.txt", "w"); 
fprintf(output, "LBASDHASD"); 
fclose(output); 

Что я делаю неправильно? В коде, который выполняется перед этими строками, я также использовал указатель на файл, но файл уже закрыт.

+4

Хорошо, сначала вы не проверяете результат fopen. – OldProgrammer

+0

Выполняете ли вы что-нибудь помимо выделения тренда, скажем, заполняя его контентом? –

+3

Использование 'fprintf (file, line)' также опасно, поскольку переменная 'line' может содержать спецификаторы fomat. Рассмотрим использование 'fprintf (файл,«% s », строка)'. –

ответ

1

Ваш код плохой, так как вы не проверяете наличие ошибок. output может быть указатель NULL (и, вероятно, будет один):

#include <errno.h> 
#include <string.h> 

FILE* output; 
output = fopen("test.txt", "w"); 
if(!output){ 
    //handle the error 
    printf("something went wrong: %s", strerror(errno)); 
    exit(1); 
} 
fprintf(output, "LBASDHASD"); 
fclose(output); 

Вы уверены, что у вас есть разрешение на создание файла в ВПЦ?

fopen()errno к ошибке в случае неудачи. Как обычно, strerror(errno) предоставит вам описание этого кода ошибки.

0

Посмотрите, есть ли у вас имя файла правильно или нет, и убедитесь, что он находится в том же каталоге, иначе укажите полный путь к файлу. Если он ошибается, он не откроется и не будет уверен в разрешении файла.

#include <stdio.h> 

int main() 
{ 
    FILE *output; 
    output = fopen("test.txt","w"); 
    if(output==NULL) 
    { 
     printf("Error in opening the file"); 
     return 0; 
    } 
    fprintf(output, "%s", "LBASDHASD"); 
    fclose(output); 
    return 0; 
} 
Смежные вопросы