我的代码如下所示:
char* newChar = new char[strlen(inputCharArray)+1];
if (NULL == newChar) {
return;
}
strncpy(newChar, inputCharArray, strlen(inputCharArray));
newChar[strlen(inputCharArray)] = '\0';
对我来说这似乎是完全有效的代码。但 GCC 9.2.1 对此有所抱怨,并发出以下警告:
警告:'char* strncpy(char*, const char*, size_t)' 指定边界 取决于源参数的长度 [-Wstringop-overflow=]
是的,GCC 对此有点奇怪。但这实际上确实指出了代码中的感知和性能问题。如果您在知道源字符串长度时使用适当的函数,它会变得更快并且避免警告:
size_t inputCharArrayLen = strlen(inputCharArray) + 1U;
char* newChar = new char[inputCharArrayLen];
if (NULL == newChar) {
return;
}
memcpy(newChar, inputCharArray, inputCharArrayLen);
(这也避免了可能运行
strlen
两次。)