我编写了以下2个ltrim函数(从字符串左侧删除空格的函数): 1.(此处此代码不能获得此类代码作为答案) void ltrim(char * str, int size){ char const *start = str; char const *end = start + size; for(;*start (*s
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).