나는 인사의 이름과 오늘 날짜의 날짜가 포함 된 구조체에 다음 코드를 실행하면 : 나는의 콘솔 출력을 얻을어떤 경우에이 메모리 위치가 손상되는 이유는 무엇입니까?
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:n
Date Added: 0í
나는 w를 테스트 한 :이 (I 가정 어느 메모리, 문자는 문자로 읽고있는하지 뭔가 문제가 있음을 의미)처럼 hether 그것은 메모리 오버플로 때문입니다. 그러나 첫 번째 이후에 printf를 추가하면 fprintf와는 달리 예상대로 작동합니다. 왜 그런가요? 어떻게 파일에 콘솔에 무엇을 쓸 수 있습니까?
(나는 충분한 정보가 없기 때문에 취소 된 이전 질문에서이 질문을 수정했습니다.이 정보가 충분하지 않거나 비슷한 질문을 다시하는 것이 잘못된 연습 인 경우, 내가 프로그래밍 및 스택 오버 플로우에 비교적 새로운입니다. 알려주세요, 그래서 일반적으로 조언에 감사드립니다. 감사합니다!)
'returnSite-> date = s;'->'strcpy (returnSite-> date, s); ' – BLUEPIXY