字符串函数实现的小问题啊-----------------大虾们帮帮忙啊-----------

wing_0706 2011-12-07 10:53:48

#include <stdio.h>
#include <assert.h>
char *str_cpy(char *dst, const char *src)
{
char *address;

assert((dst != NULL) && (src != NULL));
address = dst;
while ((*dst++ = *src++) != '\0') //这一句改成 while (*dst++ = *src++) 这样不严谨吗? 这样少了个判断速度有更快吗
{
;
}

return address;

}


是不是上面的 要是去笔试的时候 写成while (*dst++ = *src++)会扣分啊?
为什么我看crt源码 strcat的实现 就没有 !='\0'判断了啊

char *strcat(char *dst, const char *src)
{
char *p = dst;

while(*p)
{
p++;
}

while (*p++ = *src++)
{
}

return dst;
}

...全文
120 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wing_0706 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hfred 的回复:]
引用 10 楼 wing_0706 的回复:
引用 9 楼 hfred 的回复:
while (*p++ = *src++) 是c语言风格,可以不是bool表达式,int类型也行,while ((*dst++ = *src++) != '\0')是c++的规范要求,一般公司都会要求条件判断必须使用bool表达式,为的是易懂,两者是等价的,如果编译器优化的够好,效率应该是一样的。
如果笔试要写……

如果深究的话,高级语言的字符串函数底层实现原理也是这样的
[/Quote]
恩,谢谢啊。
HFred 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wing_0706 的回复:]
引用 9 楼 hfred 的回复:
while (*p++ = *src++) 是c语言风格,可以不是bool表达式,int类型也行,while ((*dst++ = *src++) != '\0')是c++的规范要求,一般公司都会要求条件判断必须使用bool表达式,为的是易懂,两者是等价的,如果编译器优化的够好,效率应该是一样的。
如果笔试要写strcpy函数的话我建议你可以写个更安全的ch……
[/Quote]
如果深究的话,高级语言的字符串函数底层实现原理也是这样的
wing_0706 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 anyidan 的回复:]
这要看 面试管 当时的心情
[/Quote]
就是要靠RP了
AnYidan 2011-12-07
  • 打赏
  • 举报
回复
这要看 面试管 当时的心情
wing_0706 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhaghi 的回复:]
这不会扣分吧,只要你真的明白为什么不加!='\0'也可以就行了
[/Quote]
你看这连接的解说,,http://baike.baidu.com/view/1026861.htm无语啊..
wing_0706 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnuqinhuan 的回复:]
我还是喜欢没有\0的
[/Quote]
我也是啊, ,,没\0判断速度有快些吗?
zhaghi 2011-12-07
  • 打赏
  • 举报
回复
这不会扣分吧,只要你真的明白为什么不加!='\0'也可以就行了
wing_0706 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pqpqr 的回复:]
改成while (*dst++ = *src++);
dst[-1] = '\0';
简洁既是美... 就是要注意while跳出来src指向'\0'之后的地址
[/Quote]
改成while (*dst++ = *src++);
dst[-1] = '\0'; 这一句也要啊?? 不是在循环里就给赋上去了吗?
無_1024 2011-12-07
  • 打赏
  • 举报
回复
我还是喜欢没有\0的
  • 打赏
  • 举报
回复
改成while (*dst++ = *src++);
dst[-1] = '\0';
简洁既是美... 就是要注意while跳出来src指向'\0'之后的地址
wing_0706 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hfred 的回复:]
while (*p++ = *src++) 是c语言风格,可以不是bool表达式,int类型也行,while ((*dst++ = *src++) != '\0')是c++的规范要求,一般公司都会要求条件判断必须使用bool表达式,为的是易懂,两者是等价的,如果编译器优化的够好,效率应该是一样的。
如果笔试要写strcpy函数的话我建议你可以写个更安全的char *str_cpy(char *d……
[/Quote]
这样啊,那明白多了谢谢啊, 不过字符串函数 一开都只有c语言版的吗,,?
HFred 2011-12-07
  • 打赏
  • 举报
回复
while (*p++ = *src++) 是c语言风格,可以不是bool表达式,int类型也行,while ((*dst++ = *src++) != '\0')是c++的规范要求,一般公司都会要求条件判断必须使用bool表达式,为的是易懂,两者是等价的,如果编译器优化的够好,效率应该是一样的。
如果笔试要写strcpy函数的话我建议你可以写个更安全的char *str_cpy(char *dst, const char *src, int idstLen),防止src长度大于dst的情况导致数组访问越界。
wing_0706 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 w1003025426 的回复:]
没有'\0'速度不会更快吧,while循环每次还是得判断啊!
如果你的while循环中没有语句可以直接写成while();
[/Quote]
那不是能少一次判断吗..?
无限生机 2011-12-07
  • 打赏
  • 举报
回复
没有'\0'速度不会更快吧,while循环每次还是得判断啊!
如果你的while循环中没有语句可以直接写成while();

69,373

社区成员

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

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