指针和结构变量

Pointers and struct variables

我正在使用 first.c 的单独单元定义结构,然后希望通过使用函数调用 processSructFromMain 在我的主模块中访问它。但是只能直接调用 printf 。调用 processStructFromMain 根本不会产生结果。 "Struct2 " 在第二个 printf 中也没有显示结果。

我做错了什么?

c中的全部,11标准

主要:

#include <stdio.h>
#include <stdlib.h>
#include "first.h"



void processStructFromMain(myStruct *s){
    printf("anotherProcess %s \n", s->name);
}

int main() {
    myStruct* s = getStructFromFirst();
    printf("Struct1 %s \n", s->name);



    processStructFromMain(s);
    printf("Struct2 %s \n", s->name);
    return 0;
}

first.c

#include "first.h"


myStruct *getStructFromFirst() {
    char* chr = "THIS IS STRING [=11=]";
    myStruct* s = &(myStruct){.name=chr};
    return s;
}

first.h

#ifndef TESTONE_FIRST_H
#define TESTONE_FIRST_H

struct MYSTRUCT{
    char* name;
};


typedef struct MYSTRUCT myStruct;

myStruct* getStructFromFirst();


#endif //TESTONE_FIRST_H

一旦你的 getStructFromFirst() return,那个临时的 (myStruct){.name=chr}; 就不再存在了。您 return 不再存在的对象的地址。为什么还要使用指针?

myStruct getStructFromFirst(void)
{
    myStruct s{ .name = "foo" };
    return s;
}

// ...

int main(void)
{
    // ...
    myStruct foo = getStructFromFirst();
    processStructFromMain(&foo);
}

还有...

char* chr = "THIS IS STRING [=11=]";

无需手动以零终止字符串文字。 "THIS IS STRING" 已经零终止。

另一件事:当 C 中的函数不带任何参数时,原型中的参数列表及其定义应为 void: T foo(void);。具有空参数列表的函数,如 T foo(); 接受未指定数量的参数。