如何编写动态数量的行并将它们分配给 C 中的数组
How can I write a dynamic amount of lines and assign them to array in C
您好,我正在尝试将一些行写入 C 中的数组,行数取决于用户的第一个输入。
我的程序在第二次迭代后意外结束,即使我要求循环 8 次。
int main(){
char line[32];
fgets(line, 32, stdin); //Get the (int)amount of future input lines
int n = atoi(line);
char *array[n]; // Create an array to hold the future lines
for (int i = 0 ; i < n ; i++) {
fgets(array[i], 32, stdin); //Get a line and assign to array
}
for (int i = 0 ; i < n ; i++) {
printf("%s\n", array[i]);
}
return 0;
char *array[n];
这一行创建了一个包含 n 个 char * 类型元素的数组,因此是一个指针数组。由于它们未初始化,您最终会将字节写入内存中的任意地址,从而导致崩溃。
您需要使用 malloc() 为数组的每个元素分配 32 个字节的内存,或者声明一个包含 n 个 char[32] 元素的数组(因此每个元素都是一个 32 个字符的数组):
char array[n][32];
您好,我正在尝试将一些行写入 C 中的数组,行数取决于用户的第一个输入。
我的程序在第二次迭代后意外结束,即使我要求循环 8 次。
int main(){
char line[32];
fgets(line, 32, stdin); //Get the (int)amount of future input lines
int n = atoi(line);
char *array[n]; // Create an array to hold the future lines
for (int i = 0 ; i < n ; i++) {
fgets(array[i], 32, stdin); //Get a line and assign to array
}
for (int i = 0 ; i < n ; i++) {
printf("%s\n", array[i]);
}
return 0;
char *array[n];
这一行创建了一个包含 n 个 char * 类型元素的数组,因此是一个指针数组。由于它们未初始化,您最终会将字节写入内存中的任意地址,从而导致崩溃。
您需要使用 malloc() 为数组的每个元素分配 32 个字节的内存,或者声明一个包含 n 个 char[32] 元素的数组(因此每个元素都是一个 32 个字符的数组):
char array[n][32];