我想创建一个包含 N 个位置的数组。在每个位置,我想存储一个10个字符的字符串。
这就是我尝试过的。在给出的示例中,N = 15。但是这个数字可以改变。
char *userArray[10] = malloc(sizeof(char[10])*15);
编译 iget 时出现错误:无效的初始值设定项。
char *userArray[10] = malloc(sizeof(char[10])*15);
malloc(3) 返回一个指针,并且*userArray[10]
不是指针。这是一个由 10 个指针组成的数组。您无法使用指针初始化数组(任何数组)。数组只能用值初始化。编译器(而不是您)决定数组的地址。
你想要的定义是
char userArray[15][10]
这是一个包含 15 个元素的数组,每个元素本身都是一个包含 10 个字符的数组。同一件事的另一种说法:
typedef char elem_t[10];
elem_t userArray2[15];
当数组元素表示程序中其他地方出现的某些内容时,这样的 typedef 非常有用,因此所有此类变量都具有相同的类型和大小。
现在我将提供一些有争议的建议:不要使用malloc(3) 具有常数参数。如果您在编译时知道该值,则不需要 malloc。 malloc 是为了dynamic内存,其大小在运行时由编译时未知的值确定的内存。
有人会警告您不能在堆栈上分配大数组(从技术上讲,自动的存储在C)。确实如此,但你有static可用的存储,可以是函数本地的,也可以是文件范围的。
有一些罕见的情况证明使用静态大小的动态内存是合理的。当你学习语言时,你可以假设它们不存在。在使用 C 的 35 年中,我怀疑我见过十几个例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)