01/10/2018, 16:24

Lỗi đọc file trong C

Các bác giải thích dùm mình rằng tại sao đọc file nó xuất ra như vậy trong khi ghi vào thì OK ?

NBQ viết 18:26 ngày 01/10/2018

Trong chương trình của bạn hàm write không có vấn đề gì, nhưng trong hàm read(char *s) bạn khai báo con trỏ char *str sau đó dùng luôn mà chưa cấp phát bộ nhớ cho nó dẫn đến gặp lỗi khi gọi hàm read, lúc bạn chạy rất may mắn là vùng nhớ mà con trỏ str trỏ tới chưa được sử dụng bởi chương trình khác nếu không sẽ gây ra lỗi Segment fault.

Bạn có thể sửa lỗi bằng cách thay thế khai báo con trỏ char *str bằng một mảng (ví dụ char str[128]) hoặc nếu dùng con trỏ thì cấp phát bộ nhớ cho str trước khi sử dụng.

#include <stdio.h>

void read(char *s)
{
    FILE *f = fopen(s, "r");
    char str[128];
    fgets(str, 128, f);
    puts(str);
    fclose(f);
}

void write(char *file, char *str)
{
    FILE *f = fopen(file, "w");
    fputs(str, f);
    fclose(f);
}

int main()
{
    char *s = "Hello";
    write("file1.txt", s);
    read("file1.txt");

    return 0;
}

Bài liên quan
0