gpt4 book ai didi

c - Strcpy:表现得更像 'strcut'

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:48 26 4
gpt4 key购买 nike

char a[3], b[3];
strcpy(a,"abc");
printf("a1 = %s\n", a);
strcpy(b,a);
printf("a2 = %s\n", a);
printf("b = %s\n", b);

根据我对 strcpy 的理解,输出将是:

a1 = abc  
a2 = abc
b = abc

取而代之的是

a1 = abc  
a2 =
b = abc

为什么当我第二次调用 strcpy 时它(显然)删除了 a 的内容?

谢谢

最佳答案

这是一个 buffer overflow问题 - 您的 ab 太短了 - 它们没有空终止符的空间。发生的事情是 a 在内存中紧跟在 b 之后,所以当 strcpy(b,a) 执行时,空终止符存储在末尾b 的第一个字符实际上是与a 的第一个字符相同的内存位置。这使得 a 突然变成了一个空字符串。

对于初学者,将数组的长度设为 4 而不是 3。这在沙盒/游戏/学习模式中是可以的,但在生产代码中考虑:

  • 使用更安全的字符串函数(例如 strncpy)来避免缓冲区溢出。
  • 使用支持可变大小或预先计算适合数据所需大小的字符数组/缓冲区。

关于c - Strcpy:表现得更像 'strcut',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404253/

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