C语言关于strcpy函数的问题求解

[复制链接]
查看11 | 回复2 | 2021-1-27 06:28:22 | 显示全部楼层 |阅读模式
RT
C语言的一道习题
从键盘接收一个字符串,然后按字符顺序从小到大进行排序,并删除重复的字符
#include
#include
voidmain()
{
charstr[100],*p,*q,*r,c;
printf("输入字符串:");
gets_s(str);
for(p=str;*p;p++)
{
for(q=r=p;*q;q++)
{
if(*r>*q)
{
r=q;
}
}
if(r!=p)
{
c=*r;
*r=*p;
*p=c;
}
}
for(p=str;*p;p++)
{
for(q=p+1;*p==*q;)
{
strcpy(p,q);
}
}
printf("结果字符串:%s\n",str);
}

问题在于


使用strcpy后q指向了字符串的下一个字符元素的地址这是为什么

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:28:22 | 显示全部楼层
好好查看文档说明,理解一下strcpy的参数的意义
拿你的例子来说
aaaccc(开始的字符串)
pq(当前指针的位置,p对第一个a,q对第二个a)
printf("%s\n",q);打印q地址开始的字符串就是aaccc(从第二个a开始打印)到这里没问题吧
strcpy(p,q);就是把q地址开始的字符串拷贝到p地址开始的内存里,也就是把aaccc拷贝到第一个a开始的位置
所以拷贝后的内存为
aaccc
pq(p和q地址不变,但字符串往前挪了)
printf("%s\n",q);p和q的位置没变,打印q地址开头的字符串就是
accc
也就是p和q的地址不变,但字符串的往前挪了一个位置,所以q就相当于指向下一个字符串元素


回复

使用道具 举报

千问 | 2021-1-27 06:28:22 | 显示全部楼层
好的我明白了。一开始没注意
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行