所以我只是想学习 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 - (在文件中)
答案 0 :(得分:1)
试试这个
char dates[177/sizeof(char) + strlen(event)/sizeof(char)] = {0};
在声明日期变量时在 addToDay 函数中。我认为您没有将内存设置在那里,因此该内存位置可能会有一些垃圾。