在緩衝區之間移動字符串時,我經常將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