c中读/写文本文件中的混淆

时间:2015-11-25 14:16:00

标签: c

我正在尝试在.txt文件中进行一些简单的读/写操作。我编写了一个用于读取内容的函数,另一个用于写回内容-1。

例如," counter.txt"中的内容在完成我的代码之后,我想控制台输出应该显示为:

索引现在是:20

索引现在是:19

但是显示20和0,我不明白为什么。谢谢你的帮助!

#include <stdio.h>
#include <stdlib.h>

int read_data() {
    FILE *fptr;
    char *s;
    fptr = fopen("counter.txt","r");
    if (!fptr) {
        printf("fail to open..\n");
        exit(1);
    }

    fgets(s,25,fptr);
    fclose(fptr);

    return atoi(s);
}

void write_data(char *s) {
    FILE *fptr;
    fptr = fopen("counter.txt","w");
    if (!fptr) {
        printf("fail to open..\n");
        exit(1);
    }

    fputs(s,fptr);
    fclose(fptr);
}

int main(void) {
    char index_str[5];
    int index = read_data();
    printf("index now is:%d\n", index);
    sprintf(index_str,"%d",index-1);
    write_data(index_str);

    index = read_data();
    printf("index now is:%d\n", index);
    sprintf(index_str,"%d",index-1);
    write_data(index_str);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

read_data()中,替换

char *s;

char s[200];

您将拥有有效的s。这会在堆栈上分配200个字节,您(fgets())可以安全地在那里写东西并使用它。