gpt4 book ai didi

c++ - 使用 strlen() 在堆栈中分配缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:48 26 4
gpt4 key购买 nike

我有以下代码:

void function(char *str)
{
int i;
char buffer[strlen(str) + 1];

strcpy(buffer, str);
buffer[strlen(str)] = '\0';

printf("Buffer: %s\n", buffer);
}

我预计此代码会引发编译时错误,因为在堆栈上分配的“缓冲区”具有运行时依赖长度(基于 strlen())。但是在 GCC 中,编译通过了。这是如何运作的?缓冲区是动态分配的,还是如果它仍然是本地堆栈,分配的大小是多少?

最佳答案

C99 允许变长数组。不在 C99 中编译你的代码不会给出任何错误,因为 GCC 也允许可变长度数组作为扩展。

6.19 Arrays of Variable Length :

Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++.

关于c++ - 使用 strlen() 在堆栈中分配缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782830/

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