社区
C语言
帖子详情
为什么这个strcat用不起?
fxc123
2004-10-23 05:41:35
char* Strcpy(char* des,char* sour)
{
char* temp=des;
while(*temp)
temp++;
while(*temp=*(sour++))
temp++;
return des;
}
问题在第一个while循环,用
while(*temp)
temp++;
就可以。
为什么呢?
...全文
524
37
打赏
收藏
为什么这个strcat用不起?
char* Strcpy(char* des,char* sour) { char* temp=des; while(*temp) temp++; while(*temp=*(sour++)) temp++; return des; } 问题在第一个while循环,用 while(*temp) temp++; 就可以。 为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
37 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liujingfu123
2004-10-25
打赏
举报
回复
晕了……在程序正确的前提下还是把程序的可读性放在首要位置吧…… 过分追求代码的简洁就会使程序看起来很费神的……
cxjddd
2004-10-24
打赏
举报
回复
到底是 strcat 还是 strcpy >_<
zhangfjj
2004-10-24
打赏
举报
回复
*temp++ ===>*(temp++) ===> *temp temp++
先取值作运算,后++
-----
先做++,temp加1,但temp++的值是作自增运算前temp的值
*(temp++)是取表达式temp++的值,所以。。。
road1981
2004-10-24
打赏
举报
回复
复杂的表达式是错误的根源...Bjarne大大的话是真理
一叶还真不知秋
2004-10-24
打赏
举报
回复
那是,最少一个可分开,一个不可分开嘛。
烂笔头Danky
2004-10-24
打赏
举报
回复
虽然在语法上*temp++;是等价于*temp;temp++;但在不同时候还是会有不同的!
一叶还真不知秋
2004-10-24
打赏
举报
回复
char temp[4];
char *p = temp;
temp[0] = 'a';
temp[1] = 'b';
temp[2] = 'c';
temp[3] = 0;
char c = *p++;===> c = 'a'; p->temp[1]
一叶还真不知秋
2004-10-24
打赏
举报
回复
没错啊,只是在while(*temp++);的单个循环中temp的值不变,该轮循环结束后temp就变了。
zhangfjj
2004-10-24
打赏
举报
回复
楼上的,看看后缀运算符再说吧。^_^
一叶还真不知秋
2004-10-24
打赏
举报
回复
*temp++ ===>*(temp++) ===> *temp temp++
先取值作运算,后++
zhangfjj
2004-10-24
打赏
举报
回复
注意*temp++等价于*(temp++)
zhangfjj
2004-10-24
打赏
举报
回复
while(*temp++)在判断了*temp的值为假后不会马上退出
=====================
不对!
while(*temp++)
;
在对*temp++进行判断,先temp++,由于是后缀,temp++表达式的值并不变,所以*temp++还是指向原来的字符。
一叶还真不知秋
2004-10-24
打赏
举报
回复
孺子可教
fxc123
2004-10-24
打赏
举报
回复
也就是说
while(*temp++)在判断了*temp的值为假后不会马上退出
要等*temp++再执行一次后才会结束?
zhangfjj
2004-10-24
打赏
举报
回复
#include <stdio.h>
char* Strcat(char* des,char* sour)
{
char* temp=des;
while(*temp++)
;
//要象你那么用,由于多移动了一次,所以要加上下面的语句
//这样就正确了
temp--;
while(*temp=*(sour++))
temp++;
return des;
}
void main()
{
char str1[80]="abcd";
char *p="efg";
printf("%s\n",str1);
Strcat(str1,p);
printf("%s\n",str1);
}
zhangfjj
2004-10-24
打赏
举报
回复
while(*temp++)
;
与
while(*temp)
temp++;
它们还是有不同的。
假设temp指向str[]="abcd"
对于第一个循环
循环次数 判断的*temp++ temp指针指向了
1 'a' 'b'
2 'b' 'c'
3 'c' 'd'
4 'd' '\0'
5 '\0' '\0'后面的字符去了,多移动了一个,所以这里引起了问题
出现了你的错误。
而对于第二个循环,
循环次数 判断的*temp temp++;,移动指针指向
1 'a' 'b'
2 'b' 'c'
3 'c' 'd'
4 'd' '\0'
5 '\0' 退出循环,temp没有移动
这就是问题的所在
zhangfjj
2004-10-24
打赏
举报
回复
差不多了
fxc123
2004-10-24
打赏
举报
回复
懂了
关键就是*(temp++)
取得是上一次的值
对不?
zhangfjj
2004-10-24
打赏
举报
回复
为什么不等?
char* Strcpy(char* des,char* sour)
{
char* temp=des;
while(*temp)
temp++;
while(*temp=*(sour++))/*<-------------这里写成下面的形式*/
temp++;
return des;
}
while(*temp++=*(sour++))
;
是可以的
bluwindhrt
2004-10-24
打赏
举报
回复
while(*temp++);
不等于:
while(*temp) temp++;
加载更多回复(17)
C语言 不使用
strcat
函数实现连接两个字符串功能代码
下面是用C语言实现不使用是
strcat
函数实现连接两个字符串的功能。 源代码: #include void constring(char s[],char t[],char q[]); //函数声明 int main(void) { char s[100]; char q[100]; char t[200]; ...
strcat
函数
`
strcat
`函数是C语言中的一个字符串处理函数,它用于将一个字符串连接到另一个字符串的末尾。这个函数在编程中非常常见,特别是在处理文本数据时。下面我们将详细探讨`
strcat
`函数的原理、使用方法以及注意事项。 *...
c语言不使用
strcat
函数连接两个字符串.cpp
c语言不使用
strcat
函数连接两个字符串(适合大学生,c语言初学者)
102.
strcat
.pdf
使用
strcat
函数时需要注意几个要点:首先,源字符串必须以'\0'结尾,这是因为C语言中的字符串都是以'\0'作为结束标志;其次,目标字符串也必须以'\0'结尾,否则
strcat
无法确定追加操作应该从哪里开始;再次,目标...
字符串拼接
strcat
使用及实现
c 字符串拼接字符串拼接
strcat
使用及实现
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章