+ -
当前位置:首页 → 问答吧 →  字符串函数实现的小问题啊-----------------大虾们帮帮忙啊-----------

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

时间:2011-12-07

来源:互联网

C/C++ code

#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'判断了啊
C/C++ code

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

    while(*p)
    {
        p++;
    }

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

    return dst;
}


作者: wing_0706   发布时间: 2011-12-07

改成while (*dst++ = *src++);
dst[-1] = '\0';
简洁既是美... 就是要注意while跳出来src指向'\0'之后的地址

作者: pqpqr   发布时间: 2011-12-07

我还是喜欢没有\0的

作者: hnuqinhuan   发布时间: 2011-12-07

引用 1 楼 pqpqr 的回复:
改成while (*dst++ = *src++);
dst[-1] = '\0';
简洁既是美... 就是要注意while跳出来src指向'\0'之后的地址

改成while (*dst++ = *src++);
dst[-1] = '\0'; 这一句也要啊?? 不是在循环里就给赋上去了吗?

作者: wing_0706   发布时间: 2011-12-07

这不会扣分吧,只要你真的明白为什么不加!='\0'也可以就行了

作者: zhaghi   发布时间: 2011-12-07

引用 2 楼 hnuqinhuan 的回复:
我还是喜欢没有\0的

我也是啊, ,,没\0判断速度有快些吗?

作者: wing_0706   发布时间: 2011-12-07

引用 4 楼 zhaghi 的回复:
这不会扣分吧,只要你真的明白为什么不加!='\0'也可以就行了

你看这连接的解说,,http://baike.baidu.com/view/1026861.htm无语啊..

作者: wing_0706   发布时间: 2011-12-07

没有'\0'速度不会更快吧,while循环每次还是得判断啊!
如果你的while循环中没有语句可以直接写成while();

作者: w1003025426   发布时间: 2011-12-07

引用 7 楼 w1003025426 的回复:
没有'\0'速度不会更快吧,while循环每次还是得判断啊!
如果你的while循环中没有语句可以直接写成while();

那不是能少一次判断吗..?

作者: wing_0706   发布时间: 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的情况导致数组访问越界。

作者: HFred   发布时间: 2011-12-07

引用 9 楼 hfred 的回复:
while (*p++ = *src++) 是c语言风格,可以不是bool表达式,int类型也行,while ((*dst++ = *src++) != '\0')是c++的规范要求,一般公司都会要求条件判断必须使用bool表达式,为的是易懂,两者是等价的,如果编译器优化的够好,效率应该是一样的。
如果笔试要写strcpy函数的话我建议你可以写个更安全的char *str_cpy(char *d……

这样啊,那明白多了谢谢啊, 不过字符串函数 一开都只有c语言版的吗,,?

作者: wing_0706   发布时间: 2011-12-07