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

时间:2015-07-31 10:39:32

标签: 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;
}

我期望看到strA[]在每一步strB[]如何将自身复制到strB[],即中间某处strA[]会复制strB[]个元素并保留{{1}元素。但我找不到将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.    

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

2 个答案:

答案 0 :(得分:5)

由于您在循环中调用pB之前正在递增puts(pB),因此您只能从{{1}的当前值开始看strB的部分1}}。

将您的循环更改为:

pB

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

答案 1 :(得分:0)

在打印pB之前,您将增加pB指针。你可以像下面一样修改你的吗?

while(*pA!='\0') {

    *pB = *pA++;

    puts(pB);

    pB++;

}