C初学者查询:char数组程序 - 没有获得所需的输出

neo*_*neo 2 c arrays pointers

新手问题:嗨!旨在研究一个阵列在复制期间如何填充另一个(初始化的)阵列.所以我运行了以下代码.

#include<stdio.h>

char strA[]= "\nThis is array 'a'.\n";
char strB[] = "ABCDEFGABCDEFGABCDEFG";

int main()
{
  /* Copy one string to another using pointers */

  char *pA, *pB;
  puts(strA);
  puts(strB);
  pA=strA;
  pB=strB;
  puts(pA);
  puts(pB);
  while(*pA!='\0') {
    *pB++ = *pA++;
    puts(pB);
  }
  *pB='\0';
  puts(strB);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我所期望的是看到如何在每一步中strA[]复制自己strB[],即在中间某处strB[]strA[]复制元素和剩余strB[]元素.但我找不到strA[]复制的元素strB[],尽管strB[]元素不断减少.以下是输出:

This is array 'a'.

ABCDEFGABCDEFGABCDEFG

This is array 'a'.

ABCDEFGABCDEFGABCDEFG
BCDEFGABCDEFGABCDEFG
CDEFGABCDEFGABCDEFG
DEFGABCDEFGABCDEFG
EFGABCDEFGABCDEFG
FGABCDEFGABCDEFG
GABCDEFGABCDEFG
ABCDEFGABCDEFG
BCDEFGABCDEFG
CDEFGABCDEFG
DEFGABCDEFG
EFGABCDEFG
FGABCDEFG
GABCDEFG
ABCDEFG
BCDEFG
CDEFG
DEFG
EFG
FG
G

This is array 'a'.

Process returned 0 (0x0)   execution time : 0.025 s
Press any key to continue.    
Run Code Online (Sandbox Code Playgroud)

我错过了一些基本的东西吗?任何解释都会有很大的帮助.

Bar*_*mar 5

因为pB在调用puts(pB)循环之前你正在递增,所以你只看到strB从当前值开始的部分pB.

将你的循环改为:

while(*pA!='\0') {
    *pB++ = *pA++;
    puts(strB);
}
Run Code Online (Sandbox Code Playgroud)

并且您将在每个步骤后看到包含中间更改的整个字符串.