社区
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++;
就可以。
为什么呢?
...全文
517
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写文章
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
函数实现连接两个字符串功能代码
字符串连接函数: 字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,在字符串处理函数中,
strcat
函数具有字符串连接功能。下面是用C语言实现不使用是
strcat
函数实现连接两个字符串的功能。 源代码: #include
void constring(char s[],char t[],char q[]); //函数声明 int main(void) { char s[100]; char q[100]; char t[200]; printf(输入字符串是s:\n); //提示输入字符
c语言不使用
strcat
函数连接两个字符串.cpp
c语言不使用
strcat
函数连接两个字符串(适合大学生,c语言初学者)
strcat
函数
此文档对
strcat
函数做了详细的说明以及举例说明其用法,同时也把他的函数原型给列出来了
自己实现
strcat
用自己的函数实现string类中的
strcat
函数。
strcpy,
strcat
,strcmp,strlen,strchr
strcpy,
strcat
,strcmp,strlen,strchr
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章