gpt4 book ai didi

c++ - char 数组在最后一次迭代时复制整个单词而不是单个字母

转载 作者:行者123 更新时间:2023-11-28 01:37:15 26 4
gpt4 key购买 nike

#include <iostream>
using namespace std;
void myStrcpy(char [], char []);
int main(int argc, const char * argv[]) {
char c1[] = "htako";
char c2[] = "Mark";

myStrcpy(c1, c2);
cout << c2 << endl;

return 0;
}

void myStrcpy (char c1[], char c2[]) {
int i = 0;
while(c1[i] != '\0') {
c2[i] = c1[i];
cout << c1[i] << " ::: " << i << endl;
i++;
}
}

当我单步执行调试器时,一切正常,直到 i = 4,在第 4 次交互时,它从(第 3 次迭代)htak 转到 htakohtako。我不明白为什么它会在最后一次迭代时复制整个单词。当我在第四次迭代中打印出 c1[i] 时,它会按预期打印出一个 o,但是最后这个额外的 htako 是从哪里来的呢?

最佳答案

您问题的答案与内存的布局方式有关。如果您检查内存,您会看到:

c2              c1 
M, a, r, k, \0, h, t, a, k, o, \0

您的代码中有 2 个问题。

  1. 你有缓冲区溢出 c2 只有 5 个字节(Mark + 空终止符),但你正在覆盖空终止符,因为 c1 是 6 个字节长(htako +空终止符)
  2. 你不是 null 终止你的字符串

您看到字符串似乎在增长,因为您覆盖了空终止符。在其他情况下,您的程序可能会崩溃。

关于c++ - char 数组在最后一次迭代时复制整个单词而不是单个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48752263/

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