我一直在想,我怎么才能逃脱惩罚:
int main(int argc, char **argv) {
printf("%p %s %d\n", &argv[1], argv[1], strlen(argv[1]));
char copy[strlen(argv[1]) + 1];
strcpy(copy, argv[1]);
printf("%p %s %d\n", ©, copy, strlen(copy));
return 0;
}
字符数组copy
无论如何都会被分配,程序运行正常,打印出原件和副本。Valgrind不会抱怨任何事情。
我认为如果没有malloc,动态数组在C中是不可能的。我说错了吗?
发布于 2011-07-12 05:26:08
可变长度数组最初是一种GCC extension,但也被C99采用。
它们仍然被分配在堆栈上,所以让它们“巨大”被认为是不好的风格(有一天可能会打破你的习惯)。
发布于 2011-07-12 05:52:30
甚至在“可变长度数组”出现之前,就已经有了“可变长度数组”,感谢gcc和C99:
alloca()
--允许动态分配堆栈(“自动”)内存。
https://stackoverflow.com/questions/6656731
复制相似问题