c - 指针和结构变量

标签 c pointers c11

<分区>

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

我做错了什么?

所有的in 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;
}

先.c

#include "first.h"


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

第一个.h

#ifndef TESTONE_FIRST_H
#define TESTONE_FIRST_H

struct MYSTRUCT{
    char* name;
};


typedef struct MYSTRUCT myStruct;

myStruct* getStructFromFirst();


#endif //TESTONE_FIRST_H

最佳答案

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

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 中的函数不带任何参数时,原型(prototype)中的参数列表及其定义应为 void:T foo(void);。具有空参数列表的函数,如 T foo(); 接受未指定数量的参数。

关于c - 指针和结构变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54276851/

相关文章:

c - 如何以编程方式确定将使用哪个源 IP 地址到达给定目标 IP 地址

objective-c - 对于 Objective-C ... 指向方法的指针

c++ - 在用户插入数据之前创建结构对象时,Vector 返回乱码

c - 哪里可以找到timespec_get的源代码?

c - 在 C 中静态初始化链表的最佳方法?

将 GCC 的 __builtin_ia32_pshufd 和 __v4si 模式转换为可移植内在模式?

c - 我想对c中的字符数组进行排序

c - C 中动态分配数组的函数 -- 两者之间有什么区别?

c - 如何使用 SDL 在乘法模式下位图传输图像?