将指针传递给函数,数据在函数中初始化,返回时显示为未初始化

Luk*_*ice 0 c time pointers

我正在将GetCurrentDate()指针传递给tm结构.在该函数中,我打印未初始化的数据,然后初始化.预期成绩.

但是当我返回时,tm结构显示为未初始化.请参阅下面的控制台输 我究竟做错了什么?

未初始日期:??? ??? - 1073908332 01:9448278:-1073908376 -1217355836

初始日期:2010年5月5日星期三23:08:40

来电日期:??? ??? - 1073908332 01:9448278:-1073908376 -121735583

int main()
{
    test(); 
}

int test()
{
    struct tm* CurrentDate;
    GetCurrentDate(CurrentDate);
    printf("Caller date:%s\n",asctime (CurrentDate));
    return 1;
}

int GetCurrentDate(struct tm* p_ReturnDate)
{ 
    printf("uninitialized date:%s\n",asctime (p_ReturnDate));
    time_t m_TimeEntity;
    m_TimeEntity = time(NULL); //setting current time into a time_t struct

    p_ReturnDate = localtime(&m_TimeEntity); //converting time_t to tm struct
    printf("initialized date:%s\n",asctime (p_ReturnDate));
    return 1;
}  
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 6

您正在更新函数中的指针p_ReturnDate,而不是更新p_ReturnDate指向的结构.因为指针是按值传递的,所以更新不会影响调用者.

同样正如Joseph Quinsey所指出的那样,你需要提供一个放置结果的地方.你只是在调用者中分配一个指针,而不是整个结构.


Jos*_*sey 5

在test()中,您需要实际指定用于存储数据的内存.例如;

struct tm CurrentDate;
GetCurrentDate(&CurrentDate);
printf("Caller date:%s\n",asctime(&CurrentDate));
Run Code Online (Sandbox Code Playgroud)

  • 是的,正如Mark Ranson指出的那样,可怕的双虫设计模式. (2认同)