【发布时间】:2021-11-29 17:32:06
【问题描述】:
我用 C 语言编写了一个代码,它利用了动态内存分配,但我的输入在第二次迭代之后被跳过了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int n;
printf("Enter the number of users :");
scanf("%d", &n);
// char **array = malloc(n * sizeof(char *));
char flag[4];
for(int i=0;i<n;i++) {
printf("Does user have middle name? (yes/no) :");
scanf("%s", flag);
if (strcmp("yes", flag)==0) {
char **array = malloc(3 * sizeof(char *));
for(int j=0;j<3;j++)
array[i] = (char *)malloc(9);
printf("First name :");
scanf("%s", array[0]);
printf("Middle name :");
scanf("%s", array[1]);
printf("Last name :");
scanf("%s", array[2]);
for(int i=0;i<3;i++)
free(array[i]);
free(array);
}
else {
char **array = malloc(2 * sizeof(char *));
for(int j=0;j<2;j++)
array[i] = (char *)malloc(9);
printf("First name :");
scanf("%s", array[0]);
printf("Last name :");
scanf("%s", array[1]);
for(int i=0;i<2;i++)
free(array[i]);
free(array);
}
}
}
在这里,假设我给出 n=3 并输入“是”。它输入名字、中间名、姓氏,然后跳过下一个“它有中间名吗”。为什么会这样??
【问题讨论】:
-
请edit您的问题显示您在运行时提供给程序的完整和完整的输入。
-
我还建议您以此为契机,学习如何使用 调试器 在监视变量及其值的同时逐语句逐句执行代码,以了解真正的发生在代码中。
-
在第一次迭代中输入名字和中间名后立即出现分段错误。这肯定会阻止它第二次出现。另外,您忘记包含 string.h 和 stdio.h。
标签: c memory input allocation