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 loopptrA
已经指向字符串的末尾,第二个循环将运行零次。很明显,重置指针位置就像在这一行上一样。教员说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'){