我必须确保作为参数传递的字符串不会导致溢出。我被用strncpy这样做,但结束“\ 0”,分配的内存适量等等给了我一些麻烦......请确保一个字符串作为参数传递不会导致溢出
我的解决办法是这样的:
l = strlen(argv[optind]);
if(l<MAX_LENGTH) {
msg = malloc((l+1) * sizeof(char));
msg = strcpy(msg, argv[optind]);
} else {
msg = malloc((MAX_LENGTH+1) * sizeof(char));
msg = strncpy(msg, argv[optind], MAX_LENGTH);
msg[MAX_LENGTH+1] = '\0';
}
它作品,但我想知道它是否真的正确,如果有更紧凑的解决方案?
我认为这是正确的编码上述方式。但是你也可以直接将argv [optind](通过参数或指针)传递给你的内部例程,而不用担心这种限制。 –
您可能想要考虑一下这样一个事实,即您的平台很可能已经对参数大小进行了限制,因此您可以随时使用“l + 1”。 –
你应该使用strnlen – SoapBox