当我使用包含hello名称和今天日期日期的结构运行以下代码时:
typedef struct savedSite{
char *siteName;
char *date;
} SAVED_SITE;
void printSite(struct savedSite site){
printf("Site: %s\nDate Added: %s\n",site.siteName,site.date);
FILE *fpointer;
fpointer = fopen("storage.txt","a");
fprintf(fpointer,"Site: %s\nDate Added: %s\n",site.siteName,site.date);
fclose(fpointer);
}
SAVED_SITE* makeNewSite(){
SAVED_SITE* returnSite = malloc(sizeof(SAVED_SITE));
returnSite->siteName = malloc(sizeof(char)*50);
returnSite->date = malloc(sizeof(char)*25);
printf("Enter Site Name: ");
scanf("%20s", returnSite->siteName);
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char s[64];
strftime(s, sizeof(s), "%c", tm);
returnSite->date = s;
return returnSite;
}
int main() {
SAVED_SITE *newSite = makeNewSite();
printSite(*newSite);
free (newSite);
return 0;
}
我得到一个控制台输出:
Site: hello
Date Added: Sat Mar 18 16:37:12 2017
但文件输出为:
Site: hi
Date Added: 0í
为什么会这样,我如何在控制台中写入文件? 编辑:添加了程序的其余部分,但printSite方法是我感到困惑的。
答案 0 :(得分:0)
在makeNewSite
中保存稍后要使用的局部变量的地址。问题是因为以后该地址将变为无效。
returnSite->date = s; // wrong
尝试
strcpy(returnSite->date, s);