从 C 中的文件读取时出现奇怪的字符

时间:2021-03-24 14:15:42

标签: c

所以我只是想学习 C 并决定编写一个简单的日历,您可以在其中添加事件等。它几乎完美地工作,但是,当它尝试从包含信息的文件中读取时,第一行包含一些奇怪的字符:�<�}�U1.

代码如下:

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

void createCalendar(char filename[]) {
    FILE *cptr;
    cptr = fopen(filename, "w");
    char dates[177/sizeof(char)] = "";
    for(int i = 1; i < 32; i++) {
        char strtowrite[7/sizeof(char)] = "";
        sprintf(strtowrite, "%d - \n", i);
        strcat(dates, strtowrite);
    }
    fprintf(cptr, "%s", dates);
    fclose(cptr);
}

void addToDay(char filename[], int day, char event[]) {
    FILE *cptr;
    cptr = fopen(filename, "r");
    char *line = NULL;
    size_t len = 0;
    ssize_t read;
    char dates[177/sizeof(char) + strlen(event)/sizeof(char)];
    int i = 1;
    while ((read = getline(&line, &len, cptr)) != -1) {
        if (i==day) {
            char strtowrite[7/sizeof(char) + strlen(event)/sizeof(char)];
            sprintf(strtowrite, "%d - %s\n", i, event);
            strcat(dates, strtowrite);
        }
        else {
            strcat(dates, line);
        }
        i += 1;
    }
    printf("%s", dates);
    fclose(cptr);
    cptr = fopen(filename, "w");
    fprintf(cptr, "%s", dates);
    fclose(cptr);
}

int main() {
    createCalendar("january");
    addToDay("january", 12, "event");
}

第一行输出是:í¬_<89>lU1 - (在文件中)

1 个答案:

答案 0 :(得分:1)

试试这个

char dates[177/sizeof(char) + strlen(event)/sizeof(char)] = {0};

在声明日期变量时在 addToDay 函数中。我认为您没有将内存设置在那里,因此该内存位置可能会有一些垃圾。