如何在不事先知道长度的情况下在C中创建数组?我无法假设系统将使用任何特定标准

时间:2016-10-04 14:55:43

标签: c arrays

我尝试过这样的事情:

int z = 1;
int *p = &z;
*(++p) = 2;
printf("%d",*p);

我会假设* p = 22和*(p-1)= 1但代码将编译,当我尝试打印时,它会崩溃。我将在运行时知道长度,它是用户输入。

谢谢。

2 个答案:

答案 0 :(得分:2)

z是一个标量。

int *p = &z;有效。 ++p也有效,因为您可以指定一个标量的地址。

但解除引用该指针(使用*(++p))的行为未定义

考虑使用可变长度数组(C99以上,尽管即使符合C11标准的编译器也可以选择不实现可变长度数组)。如果做不到这一点,使用malloc,至少从1978年开始就是C标准的一部分。

答案 1 :(得分:1)

您可以使用mallocrealloc为指针分配和重新分配内存,以便在运行时创建数组。

请注意,取消引用尚未分配的内存 - 即运行时阵列外部的空间 - 是未定义的行为,可能导致崩溃或其他问题。不要这样做。