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

#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的值。

最佳答案

循环之后,两个指针ptrAptrB现在指向字符串的末尾。打印它们是打印空字符串。新行由puts()添加。
打印原始字符串的原因是在循环之前调用了ptrA
要打印原始字符串,请使用puts(ptrA);,或者如果愿意,让puts(strB)指向后面:

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

10-08 12:00