c语言 - 当必须依赖源长度时,如何避免"Wstringop-overflow"警告?



使用strncat将命令行参数传递给我的程序时,我收到Wstringop-overflow警告。我知道编译器在抱怨,因为我使用源长度来附加目标,但我还能如何实现这一点来防止警告?这是我的代码:

static char ttyPort[MAX_NAME_SIZE];
bzero(ttyPort,MAX_NAME_SIZE);
strncat(ttyPort, argv[2], strlen(argv[2]) + 1);

以下是警告:

../tun/main.c:24:5: warning: ‘strncat’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
strncat(ttyPort, argv[2], argsLen + 1);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../tun/main.c:23:15: note: length computed here
argsLen = strlen(argv[2]);
^~~~~~~~~~~~~~~

我已经尝试了以下内容,但编译器仍然会接受它:

uint8_t argsLen;
argsLen = strlen(argv[2]);
strncat(ttyPort, argv[2], argsLen + 1);

您可以使用目标数组的剩余大小,如下所示,而无需使用任何与源相关的长度。 -1 表示空终止字符。

strncat(ttyPort, argv[2], sizeof(ttyPort) - strlen(ttyPort) - 1);

相关内容

  • 没有找到相关文章

最新更新