使用指针和不使用指针进行字符数组复制

3

有人能帮我吗?我正在尝试使用字符数组(第一种情况)和指针(第二种情况)复制字符数组。我明白为什么在第一种情况下while循环后需要立即使用temp [i] ='0',但我不明白为什么在第二种情况下while循环后就不需要。

               1st case:
char source[50] = "Hello World";
char temp[50];
int i = 0;

    while (source[i] != '\0')
    {
        temp[i] = source[i];
        i++;
    }
    temp[i]='\0';
    cout << temp;

                  2nd Case:

char source[50] = "Hello World";
char *temp=source;
int i = 0;

while (source[i] != '\0')
{
    temp[i] = source[i];
    i++;
 }
cout << temp;

评论不适合进行长时间的讨论;本次对话已被移动到聊天室 - user3956566
1个回答

2
我理解为什么需要在第一种情况的while循环后立即使用temp [i] =' \ 0'。

因为您在拷贝'\0'之前停止了循环,所以您必须在末尾人为地这样做。

我不明白为什么在第二种情况下while循环后不需要它。

因为temp 不是一个新数组 - 它只是指向旧数组元素的指针。该循环中的每个单独赋值都像x = x:您只是用自身覆盖数组。

您不需要添加'\0',因为源数组是目标数组,所以它已经存在。

从逻辑上讲,第二种情况的代码什么也没有实现。


赛跑在轨道上。我已经考虑了你刚才说的话,我完全明白。非常感谢。我也误解了很多事情。如果我错了,请再次纠正我,但我认为temp指向堆栈上源元素本身。只有当我们使用new运算符时,指针才会指向堆上的元素。 - MarionaGlenni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接