gpt4 book ai didi

c - c中的这个缓冲区溢出解决方案有什么问题?

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

我只是因为这个 c 中缓冲区溢出的错误解决方案而在类(class)作业上被扣分,但没有得到关于它是如何错误的反馈。有人可以让我知道问题是什么吗?谢谢。

如果将超过 16 的字符串传递给此函数,该问题将提供解决方案:

void function(char *str)
{
char buffer[16];
strcpy(buffer, str);
}

这是我的解决方案

void function(char *str)
{
size_t str_length = strlen(str);

char buffer[str_length];
strcpy(buffer, str);
}

谢谢

最佳答案

您需要考虑终止字符串的空字符:

char buffer[str_length + 1];

void_ptr 指出以上还不够。所以要更健壮:

void function(char *str)
{
size_t str_length = strlen(str);
char *buffer = malloc(str_length + 1);
if (buffer == NULL)
return;
memcpy(buffer, str, str_length+1); // Thanks chux
// Do something with with buffer...
free(buffer);
}

或者也许教授只是在寻找这个:

void function(char *str)
{
char buffer[16];
strncpy(buffer, str, sizeof(buffer));
buffer[sizeof(buffer)-1] = '\0';
}

关于c - c中的这个缓冲区溢出解决方案有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314816/

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