当前位置 : 主页 > 手机开发 > 无线 >

通过memcpy移动缓冲区

来源:互联网 收集:自由互联 发布时间:2021-06-10
我编写了以下2个ltrim函数(从字符串左侧删除空格的函数): 1.(此处此代码不能获得此类代码作为答案) void ltrim(char * str, int size){ char const *start = str; char const *end = start + size; for(;*start (*s
我编写了以下2个ltrim函数(从字符串左侧删除空格的函数):

1.(此处此代码不能获得此类代码作为答案)

void ltrim(char * str, int size)
{
    char const *start = str;
    char const *end = start + size;
    for(;*start && (*start==' ' || *start=='\n' || *start=='\r' || *start=='\t');++start);

    while(start != end)
    {
        *str = *start;
        ++start;
        ++str;
    }
    *str='\0';
}

2.

void ltrim(char * str, int size)
{
    char const *start = str;
    char const *end = start + size;
    for(;*start && (*start==' ' || *start=='\n' || *start=='\r' || *start=='\t');++start);
    memcpy(str, start, end-start);
    *(str + (end - start)) = '\0';
}

第二版安全吗?

附:我已经尝试过它可行,但不确定memcpy在这种情况下是否安全.

当源和目标重叠时,您应该使用 memmove而不是 memcpy.

从memcpy手册页:

memcpy()函数将n个字节从内存区域src复制到内存区域dest.内存区域不应重叠.如果内存区域重叠,请使用memmove(3).

网友评论