【问题标题】:Program which copies one string to another using pointers produces no output使用指针将一个字符串复制到另一个字符串的程序不产生输出
【发布时间】:2015-05-08 03:18:35
【问题描述】:

我编写了以下一段代码,它使用指针从一个字符串复制到另一个字符串。

#include<stdio.h> 

int main() { 

    char strA[80] = "A string to be used for demonstration purposes"; 
    char strB[80]; 
    char *ptrA; 
    char *ptrB; 
    ptrA = strA; 
    ptrB = strB;
    puts(ptrA);
    while(*ptrA != '\0') { 
        *ptrB++ = *ptrA++;
    }
    *ptrB = '\0'; 
    puts(ptrB); // prints a new line. 
    return 0;

}

为什么puts(ptrB) 只打印一个换行符?但是puts(ptrA) 打印出strA 的值。

【问题讨论】:

  • ptrB 在循环之后指向哪里?到一个 NUL 终止符!所以什么都没有打印出来。换行符由puts 添加。
  • 不是必须在 char 数组的末尾放置一个 nul 终止符吗?我在这里错过了什么吗?如何使用 ptrB 打印 strB 的值?
  • 是的。但是将puts(ptrA) 移到 你的while 循环之后。
  • 是的。但是你已经从循环中增加了ptrB。在循环之后,您分配 NUL 终止符。现在ptrB(和ptrA)指向字符串末尾的\0

标签: c string pointers puts


【解决方案1】:

循环之后,ptrAptrB 两个指针现在指向字符串的结尾。打印它们是打印一个空字符串。新行由puts() 添加。

ptrA 打印原始字符串的原因是因为在循环之前调用了puts(ptrA);


要打印原始字符串,可以使用puts(strB),或者,如果您愿意,可以让ptrB 指向后面:

*ptrB = '\0'
ptrB = strB;  //add this
puts(ptrB);

【讨论】:

  • 因此,如果我正在编写我的版本 strcpy,我必须在最后编写语句 ptrB = strB 才能使其工作。这是写的方式吗?
  • @user1534214 你的意思是返回值?更好的方法是使用另一个指针来迭代字符串,并返回原始未修改的第一个参数。
  • 是的,这就是我的意思。你的评论说得很清楚。谢谢!
  • 或者只是puts(strB)
猜你喜欢
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
相关资源
最近更新 更多