【发布时间】:2012-08-29 19:34:11
【问题描述】:
我可以看到很多sprintf在我的应用程序中用于复制字符串。
我有一个字符数组:
char myarray[10];
const char *str = "mystring";
现在如果我想将字符串str复制到myarray,最好使用:
sprintf(myarray, "%s", str);
或
strncpy(myarray, str, 8);
?
【问题讨论】:
-
不要忘记在调用 strncpy 之后添加一个 '\0'。它可能不会自己做。
-
在哪个维度上更好?性能 - 然后是基准!虽然 strncpy 应该更快 - 它做的更少。记得加\0
-
This blog post 很好地解释了这些差异。对大多数人来说最大的不同是
snprintf告诉你它写了多少个字符,你不必担心在空间不足时会丢失空终止符。 -
那么 strcpy 是否比 strncpy 好,因为它还复制源字符串中的终止空字符?
-
strncpy可能不添加终止符'\0'的原因是因为它最初是为了将文本放入固定长度的小字段中,如果完全填充则不需要终止。