使用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);