指针和结构变量

时间:2019-01-20 13:19:22

标签: c pointers c11

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

我做错了什么?

c,11标准中的所有

主要:

awk

first.c

git status | awk '/modified/{split($0,a,":"); print "git checkout " a[2]}' | sh

first.h

#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;
}

1 个答案:

答案 0 :(得分:3)

(myStruct){.name=chr};返回后,该临时getStructFromFirst()不再存在。您返回一个不再存在的对象的地址。为什么仍要使用指针?

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

// ...

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

还...

char* chr = "THIS IS STRING \0";

不需要手动以零结尾的字符串文字。 "THIS IS STRING"已被终止为零。

另一件事:当C语言中的函数不带任何参数时,原型中的参数列表及其定义应为voidT foo(void);。带有T foo();之类的空参数列表的函数采用未指定数量的参数。