为了进行字符串连接,我一直在做char *缓冲区的基本strcpystrncpy。然后,我了解了snprintf和 friend 。

我应该坚持使用strcpystrcpy + \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");

10-07 20:27