C 指针到阵列
C++ Pointers to arrays
#include <stdio.h>
char strA[80] = "A string to be used for demonstration purposes";
char strB[80];
char *my_strcpy(char *destination, char *source)
{
char *p = destination;
while (*source != ' ')
{
*p++ = *source++;
}
*p = ' ';
return destination;
}
int main(void)
{
my_strcpy(strB, strA);
puts(strB);
}
所以我的问题是,当我拿出部分时: //*p =' 0';
它打印了完全相同的答案,那为什么需要这呢?从我的理解来看, 0是字符串之后的一个无数内存的部分
看来您已经知道零终端的重要性,但是重点是,您在外部命名空间中定义了char strB[80];
(带有静态寿命),这是由于数组strB
的初始化,将其所有字节设置为零。这就是为什么您无法观察到差异的原因,因为即使您不附加null字符,strB
的其余部分也是)。
移动strB
的定义使此可见。strA
不需要移动,因为它无关紧要。
实际上,此代码
while (*source != ' ')
{
*p++ = *source++;
}
// *p = ' ';
当*source
到达无效字符时,它未复制到*p
,因此您需要为此添加一个终结器。
看到