指针和结构变量
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();
接受未指定数量的参数。
我正在使用 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();
接受未指定数量的参数。