printf和fprintf之间的不同行为

时间:2017-03-18 23:47:44

标签: c file-io

当我使用包含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方法是我感到困惑的。

1 个答案:

答案 0 :(得分:0)

makeNewSite中保存稍后要使用的局部变量的地址。问题是因为以后该地址将变为无效。

returnSite->date = s; // wrong

尝试

strcpy(returnSite->date, s);