gpt4 book ai didi

c - 确保作为参数传递的字符串不会导致溢出

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:36 25 4
gpt4 key购买 nike

我必须确保作为参数传递的字符串不会导致溢出。我是通过使用 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';
}

它有效,但我想知道它是否真的正确,是否有更紧凑的解决方案?

最佳答案

我想这是最简单的了:

size_t l;
char* msg;
...
l = strlen(argv[optind]);
if (l > MAX_LENGTH) l = MAX_LENGTH;

msg = malloc(l + 1);
if (msg == NULL) /* handle the error as appropriate*/;

memcpy(msg, argv[optind], l);
msg[l] = '\0';

关于c - 确保作为参数传递的字符串不会导致溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com