【发布时间】:2018-05-05 13:22:23
【问题描述】:
我正在尝试掌握指针,我有这个简单的代码需要解释一下。
我需要将一个 char 数组复制到另一个。在我的主要功能中,我有以下代码:
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')保证必要的终止'\0'字符将在循环结束之前被复制。另见idownvotedbecau.se/nodebugging -
你的意思是在第二个例子中它会在遇到'\0'时中断循环,这意味着它不会终止字符串?
-
是的,我就是这个意思。
-
@daavid245 详细信息:
while (*source != '\0')循环不会“不会终止字符串”。它不会终止字符数组。一个字符数组在它有一个空字符之前不是一个字符串。