Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C+中的指针将一个数组复制到另一个数组时出现问题+;_C++_Arrays_Pointers_Char - Fatal编程技术网

C++ 使用C+中的指针将一个数组复制到另一个数组时出现问题+;

C++ 使用C+中的指针将一个数组复制到另一个数组时出现问题+;,c++,arrays,pointers,char,C++,Arrays,Pointers,Char,我是一所在线大学的学生,有一次关于将一个填充的数组复制到另一个空数组的讲座,我没有完全理解它,甚至通过给定的代码行,我也无法获得所需的结果。(请注意,在视频讲座中,他们并没有“无法”检查代码是否有效) ptrA=str1; ptrB=str2; 而(*ptrA!='\0'){ cout对于每个ptrB++,您都会松开指向ptrB初始启动位置的指针。因此,如果不将其重置到相应字符串的开头,则无法像在第二个循环中一样使用ptrB。这同样适用于ptrA: ptrA = str1; while(*ptr

我是一所在线大学的学生,有一次关于将一个填充的数组复制到另一个空数组的讲座,我没有完全理解它,甚至通过给定的代码行,我也无法获得所需的结果。(请注意,在视频讲座中,他们并没有“无法”检查代码是否有效)

ptrA=str1;
ptrB=str2;
而(*ptrA!='\0'){

cout对于每个
ptrB++
,您都会松开指向
ptrB
初始启动位置的指针。因此,如果不将其重置到相应字符串的开头,则无法像在第二个循环中一样使用
ptrB
。这同样适用于
ptrA

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

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

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

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++;
}

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

欢迎使用SO!使用调试器在循环填充后观察
ptrB
的值。提示:它指向数组开头以外的某个位置。在第一个循环之后t loop
ptrA
已经指向字符串的末尾,第二个循环将运行零次。很明显,重置指针位置就像在这一行上一样。教员说ptrB是最后一个地址,所以当我们放置这一行时*ptrB='\0';它将是数组中的最后一个元素。谢谢大家
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'){