我正在尝试掌握指针,并且我有这个简单的代码,我需要一些解释。
我需要将一个字符数组复制到另一个。在我的主函数中,我有以下代码:
const int MAX_SIZE = 100;
char x[MAX_SIZE] = "1234565";
char* y = new char[MAX_SIZE];
copyArray(x, y);
std::cout << y;
delete [] y;
现在问题来了,这段代码是如何工作的(工作得很好):
while ((*dest = *source) != '\0')
{
dest += 1;
source += 1;
}
与此不同(最后给出奇怪的字符):
while (*source != '\0')
{
*dest = *source;
dest += 1;
source += 1;
}
看起来这两个函数非常相似。 我们进行复制直到到达源字符串中的空终止符为止是有意义的,对吧(第二个函数)?
但它无法正常工作 - 我在复制的数组末尾收到一些奇怪的字符。然而,第一个函数工作得很好。
void copyArray(const char* source, char* dest);
最佳答案
表格
while ((*dest = *source) != '\0')
{
dest += 1;
source += 1;
}
如果终止 '\0'
字符是,则保证在测试条件之前应用要复制的字符 ((*dest = *source)
) 的分配达到的值被评估为false
。
第二个版本不会复制终止'\0'
字符,因为循环在
*dest = *source;
声明已达成。
关于C++ 使用指针复制 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423948/