在 C 中返回包含数组的结构体

问题描述 投票:0回答:2

我可以从函数返回一个包含数组的结构还是它是未定义的行为?

我使用什么标准重要吗?

例如:

#include <string.h>

typedef struct struct_t{
    char arr[100];
    int number;
} struct_t;

struct_t func(void)
{
    struct_t s1 = {.number = 0};
    memcpy(s1.arr, "Hello World", 100);
    return s1;
}

int main(void)
{
    struct_t s2 = func();

    return 0;
}

它会深拷贝 s1.arr 到 s2.arr 吗?

如果没有,s2.arr 会尝试指向与 s2.arr 相同的位置吗?

也许它创建了一个新数组并且仅将 s1.number 复制到 s2.number?

还是只是UB?

arrays c struct undefined-behavior
2个回答
0
投票

我可以从函数返回一个包含数组的结构吗? 未定义的行为?

结构体和联合体按值传递给函数并从函数返回是一种定义的行为

请记住,整个结构或联合将被返回,这可能是非常昂贵的操作


0
投票

是的,数组成员就像任何其他结构体成员一样被复制,就好像它是结构体中的

char arr0, arr1, ..., arr99;
一样。

© www.soinside.com 2019 - 2024. All rights reserved.