我的strcpy程序错在哪里啊?谢谢

zxwitsme 2003-11-19 11:50:17
int strcpy(char *des,char *res)
{
while(*(des++)=*res++!='\0')
;
return 1;
}
...全文
34 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2003-11-19
  • 打赏
  • 举报
回复
赋值运算符优先级低于关系运算符,所以你的
*des++ = *res++! = '\0'
相当于:
*des++ = (*res++!='\0');
应改为:
(*des++ =*res++) != '\0';
此外,++的优先级本来就比*高,这里没必要加括号。
但注意,++的优先级高并不代表*des++返回的是++后的内容,优先级高仅仅意味着可以不加括号,而并不意味着后自增的语义——返回自增前的值——会改变。
sunliwen780502 2003-11-19
  • 打赏
  • 举报
回复
int strcpy(char *dest, const char *src)
{
while(*src!='\0')
{
*dest = *src;
*dest++;
*src++;
}
*dest = '\0';
return dest;
}
yonyon 2003-11-19
  • 打赏
  • 举报
回复
while(*(des++)=*res++!='\0')
改为
while((*(des++)=*res++)!='\0')

while(*(des++)=*res++)


要知道,!=的优先级高于赋值=
Meyer 2003-11-19
  • 打赏
  • 举报
回复
while(*(des++)=*res++!='\0')
赋值操作的优先级低于比较操作
你的句子拆开是
*(des++) = (*res++ != '\0')

还有是返回内型和常用的做法不同
不支持链式操作 如:
strlen(strcpy(destinct, src));

arfi 2003-11-19
  • 打赏
  • 举报
回复
while(*des++ = *res++); //这一句就够了
1cs1ak1 2003-11-19
  • 打赏
  • 举报
回复
int strcpy(char *des,char *res)
{
while(*(des++)=*res++)
;
*des = 0;

return 1;
}
ryyy 2003-11-19
  • 打赏
  • 举报
回复
int strcpy(char *des,char *res)
{
char *tmp = des;
assert( des != NULL && res != NULL );

while((*tmp++=*res++)!='\0')
;
return SUCCESS;
}
KeepCoding 2003-11-19
  • 打赏
  • 举报
回复
char * strcpy( char *des, const char *res)
{
char *tmp = des;
assert( des != NULL && res != NULL );
while ( (*des++ = *res++) == '\0' )
;
return tmp;
}
GR 2003-11-19
  • 打赏
  • 举报
回复
MARK
rexp 2003-11-19
  • 打赏
  • 举报
回复
你的优先级搞错了。
Meyer 2003-11-19
  • 打赏
  • 举报
回复
要是dest长度不够呢?
呵呵这是调用者的责任。
C++的哲学就是大家都是成年人,
都能对自己的事负责。
Nemo1314 2003-11-19
  • 打赏
  • 举报
回复
小弟有个问题!
要是dest长度不够呢?
ilovedonny 2003-11-19
  • 打赏
  • 举报
回复
好贴,高手就是多~

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧