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)
?