C 使用指针将一个字符串复制到另一个字符串的程序不会产生输出

C 使用指针将一个字符串复制到另一个字符串的程序不会产生输出,c,string,pointers,puts,C,String,Pointers,Puts,我编写了下面的代码,它使用指针从一个字符串复制到另一个字符串 #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);

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

#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;

}
#包括
int main(){
char strA[80]=“用于演示目的的字符串”;
char-strB[80];
char*ptrA;
char*ptrB;
ptrA=strA;
ptrB=strB;
看跌期权(ptrA);
而(*ptrA!='\0'){
*ptrB++=*ptrA++;
}
*ptrB='\0';
puts(ptrB);//打印新行。
返回0;
}

为什么
put(ptrB)
只打印一行新行?但是
put(ptrA)
打印
strA

的值在循环之后,两个指针
ptrA
ptrB
现在指向字符串的末尾。打印它们就是打印一个空字符串。新行是通过
put()
添加的

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


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

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

循环之后,两个指针
ptrA
ptrB
现在指向字符串的末尾。打印它们就是打印一个空字符串。新行是通过
put()
添加的

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


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

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

循环后,
ptrB
指向哪里?给一个NUL终结者!所以什么也没印出来。换行符是由
put
添加的。是否需要在字符数组的末尾添加nul终止符?我有什么遗漏吗?如何使用ptrB打印strB的值?是的。但是移动
放置(ptrA)
之后,而
循环。是。但是您已经从循环中增加了
ptrB
。循环结束后,指定NUL终止符。现在
ptrB
(和
ptrA
)指向字符串末尾的
\0
。循环后
ptrB
指向哪里?给一个NUL终结者!所以什么也没印出来。换行符是由
put
添加的。是否需要在字符数组的末尾添加nul终止符?我有什么遗漏吗?如何使用ptrB打印strB的值?是的。但是移动
放置(ptrA)
之后,而
循环。是。但是您已经从循环中增加了
ptrB
。循环结束后,指定NUL终止符。现在
ptrB
(和
ptrA
)指向字符串末尾的
\0
。因此,如果我正在编写版本strcpy,我必须在ptrB=strB的末尾编写语句才能使其正常工作。这是写入方式吗?@user1534214您是指返回值吗?更好的方法是使用另一个指针来迭代字符串,并返回原始的未修改的第一个参数。你的评论说得很清楚。非常感谢。或者仅仅是
put(strB)
?因此,如果我正在编写strcpy版本,那么我必须在ptrB=strB的末尾编写语句才能使它工作。这是写入方式吗?@user1534214您是指返回值吗?更好的方法是使用另一个指针来迭代字符串,并返回原始的未修改的第一个参数。你的评论说得很清楚。非常感谢。或者仅仅是
put(strB)