在缓冲区之间移动字符串时,我经常将char*
当作数据缓冲区,并且不使用字符串缓冲区(strncpy
,strncat
等)。 例如:使用memcpy而不是strncpy或类似的做法是不好的做法?
memcpy(target, src, strlen(src) + 1) // after buffer size checks
//vs
strncpy(target, src, target_size - 1);
target[target_size - 1] = 0;
这是不好的做法?
编辑:我知道不同,这不是重复的,而是一个标准实践的问题。
假设您授予'target'大小至少为strlen(src)+ 1个字节长,这样做没有任何坏处。 – pah
如果你知道字符串的长度,那么'memmove()'或'memcpy()'是很好的习惯 - 虽然不是它可以/应该被经常使用。如果你不知道字符串的长度,那么'str *()'例程通常是一场灾难,'strncat()'比它更糟糕,但不会有太大的差距。 –
'memcpy()'会写入'strlen(src)+ 1'字符。 'strncpy(target,src,target_size - 1); target [target_size - 1] = 0;'将写入'target_size'字符。重要的是字符串的长度应该像1024缓冲区的“abc”副本一样大。 – chux