我正在使用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;
}
答案 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语言中的函数不带任何参数时,原型中的参数列表及其定义应为void
:T foo(void);
。带有T foo();
之类的空参数列表的函数采用未指定数量的参数。