C - struct作为返回值不适合

时间:2015-01-23 23:44:43

标签: c struct return-value

当我编译我的程序时,我收到一个错误告诉我: "分配给类型' struct timeStamp *'时不兼容的类型来自type' struct timeStamp'"

我不知道什么是错的...... 也许这是结构中的结构问题?

非常感谢你的帮助! THX - 亲切的问候!

这是我的废话代码......

结构声明:

struct timeStamp {
   int year;
   int mon;
   int day;
   int hour;
   int min;
};

struct weatherData {
   float temp;
   float hum;
   int lum;
   int wind;
   struct timeStamp *weatherStamp;
   struct weatherData *pN;
};

函数timeManipulate应该返回一个struct:

struct timeStamp timeManipulate(struct tm *timeinfo) {
    timeinfo->tm_min -= 10;
    mktime(timeinfo);

    struct timeStamp *tS = NULL;
    tS = (struct timeStamp*)malloc(sizeof(struct timeStamp));
    if (tS==NULL)
        perror("Allocation Error");

    tS->year = (timeinfo->tm_year)+1900;
    tS->mon = (timeinfo->tm_mon)+1;
    tS->day = timeinfo->tm_mday;
    tS->hour = timeinfo->tm_hour;
    tS->min = timeinfo->tm_min;
    return *tS;
};
在main()中我想要分配" timeManipulate"返回的结构。到另一个结构:

struct weatherData *pNew = NULL;
pNew->weatherStamp = timeManipulate(timeinfo);

1 个答案:

答案 0 :(得分:1)

你的函数应该返回一个指针

struct timeStamp *timeManipulate(struct tm *timeinfo)
/*               ^ make the function return a struct tiemStamp pointer */

,返回值应为

return tS;

另外,你的

if (ts == NULL)
    perror("Allocation Error");

仍然会取消引用NULL指针,它应该类似于

if (ts == NULL)
{
    perror("Allocation Error");
    return NULL;
}

这当然不起作用

struct weatherData *pNew = NULL;
pNew->weatherStamp = timeManipulate(timeinfo);

你必须为pNew分配空间。

最后,不要将malloc()的结果投反对票。