【问题标题】:Problem with copying one array to another using pointers in C++使用 C++ 中的指针将一个数组复制到另一个数组的问题
【发布时间】:2019-06-03 19:48:58
【问题描述】:

我是一所在线大学的学生,有一个关于将一个填充数组复制到另一个空数组的讲座,我不太明白,即使通过给定的代码行,我也无法获得所需的结果。 (请注意,在视频讲座中,他们没有“计算”来检查代码是否有效)。

ptrA = str1;
ptrB = str2;

while(*ptrA != '\0'){
cout << *ptrA;    // it works fine shows output
ptrA++;
}

while(*ptrA != '\0'){
*ptrB++ = *ptrA++;
}
*ptrB = '\0';

while(*ptrB != '\0'){
cout << *ptrB;     // this doesn't show any thing and crashes
ptrB++;
}

第一个 cout 工作正常,显示输出“使用指针播放”,但在将 str1 复制或复制到 str2 后,最后一个输出不起作用。

【问题讨论】:

  • 欢迎来到 SO!在填充循环之后,使用调试器观察ptrB 的值。提示:它指向不在数组开头的某个位置。
  • 在第一个循环ptrA 已经指向字符串的末尾之后,第二个循环将运行零次
  • 很明显重置了指针位置,因为在这一行教练说 ptrB 是最后一个地址,所以当我们把这行 *ptrB = '\0';这将是数组中的最后一个元素谢谢大家

标签: c++ arrays pointers char


【解决方案1】:

对于每个ptrB++,您都会失去指向ptrB 最初开始位置的指针。所以你不能在第二个循环中使用 ptrB 而不将其重置为相应字符串的开头。这同样适用于ptrA

ptrA = str1;
while(*ptrA != '\0'){
  *ptrB++ = *ptrA++;
}
*ptrB = '\0';

ptrB = str2;
while(*ptrB != '\0'){
  cout << *ptrB;
  ptrB++;
}

【讨论】:

    【解决方案2】:

    您正在递增指针,然后以某种方式期望它们再次指向字符串的开头。您可能想再次将指针重置为起点

    auto beginA = ptrA;
    auto beginB = ptrB;
    
    while(*ptrA != '\0'){
        cout << *ptrA;    // it works fine shows output
        ptrA++;
    }
    
    ptrA = beginA;  // reset to beginning, otherwise ptrA == '\0'
    
    while(*ptrA != '\0'){
        *ptrB++ = *ptrA++;
    }
    *ptrB = '\0';
    
    ptrB = beginA;
    
    while(*ptrB != '\0'){
        cout << *ptrB;     // this doesn't show any thing and crashes
        ptrB++;
    }
    

    请注意,您的代码中有

    *ptrB = '\0';
    while(*ptrB != '\0'){
    

    即 while 循环没有打印任何内容,因为它从未执行过。复制数据的循环也是如此:在第一个循环之后ptrA == '\0'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2014-10-19
      相关资源
      最近更新 更多