【发布时间】:2017-05-29 20:37:10
【问题描述】:
考虑这段代码:
limit = sizeof(str1)-strlen(str1)-1;
strncat(str1,str2,limit);
如果str2 的长度大于limit,那么strncat Nul 是否终止str1 或者我必须添加此代码,就像strncpy 的情况一样?
str1[sizeof(str1)-1] = '\0'
【问题讨论】:
-
你确定
str1是数组类型的,对吧? -
没有错,不完整。您不得不提到
str1是一个数组。 -
str1是如何声明的?我们可以猜测,但请注意,不熟悉可能出现的问题的人会使用您的代码并......遇到问题。事实上,如果str1是char *,您的代码将失败(可能非常糟糕)。 -
我编写该代码是为了给出一个通用示例。我假设 str1 是一个数组
-
@SouravGhosh:
strncpy函数会截断字符串,strcpy函数不会。它们是不同用途的不同功能,用其中一个代替另一个是没有意义的。如果您不想静默截断字符串,但您使用strncpy因为它“更安全”,您应该重新评估您的代码安全策略。strcat_s函数 是 旨在成为strcat的更安全版本,但普遍的共识是它未能实现这一目标,应该使用组合替代技术(如代码检测)而是。