【问题标题】:C Beginners' Query: char array program - not getting desired outputC初学者的查询:char数组程序 - 没有得到想要的输出
【发布时间】:2015-07-31 10:39:31
【问题描述】:

新手问题: 你好!旨在研究一个数组在复制过程中如何填充另一个(初始化的)数组。所以我运行了以下代码。

#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[] 元素。但是我找不到复制到strB[] 中的strA[] 元素,尽管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.    

我在这里缺少一些基本的东西吗?任何解释都会有很大帮助。

【问题讨论】:

  • pB 前进通过strB,因此puts(pB) 将从当前位置打印字符串。如果要打印整个、部分覆盖的字符串,请在循环内调用 puts(strB)
  • 您将循环中的指针推进到字符串的末尾。当您将所述指针视为字符串的开头时,您实际上是在向后移动字符串的开头。尝试使用两个单独的指针,一个用于打印,一个用于循环。

标签: c arrays pointers


【解决方案1】:

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

将循环更改为:

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

您会看到整个字符串以及每一步之后的中间更改。

【讨论】:

    【解决方案2】:

    您在打印 pB 之前递增 pB 指针。你能像下面这样修改你的while吗?

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

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多