當我運行含有打招呼的名稱和今天的日期之日起結構下面的代碼:什麼原因會導致此內存位置在某些情況下被損壞,而不是其他情況?
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
但一些文件輸出像這樣(我假設意味着在內存中,這裏的東西是不是一個char被解讀爲一個字符一個問題):
Site:n
Date Added: 0í
我已經測試W¯¯不管它是因爲內存溢出,但是當我在第一個printf後面添加更多的printf時,它們的行爲與預期不同,與fprintf不同。爲什麼是這樣的,我怎樣才能在文件中寫入控制檯中的內容?
(我固定從以前的一個被取消,因爲我沒有足夠的信息這個問題。如果一個人沒有足夠的信息,或者如果它是錯誤的做法,重新提出了類似的問題,讓我知道,我是相當新的編程和堆棧溢出,所以一般建議表示讚賞。謝謝!)
'returnSite->日期= S;' - >'的strcpy(returnSite->日期,S);' – BLUEPIXY