我刚刚在课程上标记了这个错误的解决方案,在c中缓冲区溢出但是没有提供关于它是如何错误的反馈.有人能让我知道问题是什么吗?谢谢.
该问题提出了一个解决方案,以防更长的字符串传递给此函数:
void function(char *str)
{
char buffer[16];
strcpy(buffer, str);
}
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案
void function(char *str)
{
size_t str_length = strlen(str);
char buffer[str_length];
strcpy(buffer, str);
}
Run Code Online (Sandbox Code Playgroud)
谢谢
JS1*_*JS1 11
您需要考虑终止字符串的空字符:
char buffer[str_length + 1];
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
或许教授只是在寻找这个:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, sizeof(buffer));
buffer[sizeof(buffer)-1] = '\0';
}
Run Code Online (Sandbox Code Playgroud)