gpt4 book ai didi

c - 为什么我可以 strupr 工作,但 strcpy 却不能

转载 作者:行者123 更新时间:2023-11-30 18:26:46 24 4
gpt4 key购买 nike

这是我的代码。

int main()
{
struct emp
{
char *n;
int age;
};
struct emp e1 = {"Dravid", 23};
struct emp e2 = e1;
strupr(e2.n);
printf("%s\n", e1.n);
return 0;
}

问题 1:网站上的答案是大写的“DRAVID”。怎么e2和e1一样?即,如果我这样做,e2.age++ 那么此更改也会反射(reflect)在 e1 中吗?

问题 2:如果我将 strupr 更改为 strcpy,会出现段错误吗?为什么?即,如果我将其更改为 strcpy(e2.n,"hoho");

最佳答案

构造完两个 emp 后,内存中的内容如下:

e1.age  = 23
e1.name = 0x12345678 (Which is a pointer in memory to "Dravid")
e2.age = 23
e2.name = 0x12345678 (Which is a pointer in memory to "Dravid")

现在记下您正在尝试做的事情。

  1. 调用 strupr(e1.name) 是未定义的行为,因为您不允许修改字符串文字。
  2. 调用strcpy(e1.name, e2.name)也是未定义的行为,因为strcpy要求传递给它的两个指针引用不同的内存块。另外,它的 UB 因为你无法修改字符串文字。
  3. 调用 strcpy(e1.name, "hiho") 也是未定义的行为,因为您无法修改字符串文字。

关于c - 为什么我可以 strupr 工作,但 strcpy 却不能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055271/

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