我必須確保作爲參數傳遞的字符串不會導致溢出。我被用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