为了进行字符串连接,我一直在做char *缓冲区的基本strcpy
,strncpy
。然后,我了解了snprintf
和 friend 。
我应该坚持使用strcpy
,strcpy
+ \0
终止吗?还是我将来应该只使用snprintf
?
最佳答案
对于大多数目的,我怀疑使用 strncpy
和 snprintf
之间的区别是否可以测量。
如果涉及到任何格式,我倾向于只坚持 snprintf
而不是混入 strncpy
。
我发现这有助于提高代码的清晰度,并且意味着您可以使用以下惯用语来跟踪缓冲区中的位置(从而避免创建Shlemiel the Painter算法):
char sBuffer[iBufferSize];
char* pCursor = sBuffer;
pCursor += snprintf(pCursor, sizeof(sBuffer) - (pCursor - sBuffer), "some stuff\n");
for(int i = 0; i < 10; i++)
{
pCursor += snprintf(pCursor, sizeof(sBuffer) - (pCursor - sBuffer), " iter %d\n", i);
}
pCursor += snprintf(pCursor, sizeof(sBuffer) - (pCursor - sBuffer), "into a string\n");