gpt4 book ai didi

c - 结构体成员 char * 在函数调用中作为参数初始化

转载 作者:行者123 更新时间:2023-11-30 17:11:29 25 4
gpt4 key购买 nike

这更多是出于好奇,而不是我想要或需要它的工作方式。但是当我做一些模型并想要测试一些东西时,我最终得到了这样的东西......并且想知道为什么它不能按我的预期工作。

typedef struct {
char *a;
char *b;
char *c;
}mystruct;

void init_chars (char *arg)
{
arg = malloc (sizeof (char)*10);
arg = "0123456789";
printf ("%s\n", arg);
}

int main ()
{
mystruct *msp = malloc (sizeof (mystruct));
init_chars (msp->a);
init_chars (msp->b);
init_chars (msp->c);
printf ("%s, %s, %s\n", msp->a, msp->b, msp->c);
return 0;
}

打印...

0123456789

0123456789

0123456789

(null),(null),(null)

最佳答案

在 C 中将值传递给函数参数时有两件事

  1. 按值传递
  2. 通过引用传递

您正在进行按值传递,因此您将一些未初始化的值传递给函数并在函数中初始化它,该值在函数外部不可见,您试图在 main() 中使用未初始化的值> 这将导致未定义的行为。

arg = "0123456789";

如果要将字符串复制到某个内存位置,则需要 memcpy()strcpy()

注意:使用未初始化的值会导致未定义的行为。

关于c - 结构体成员 char * 在函数调用中作为参数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32218726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com