我的C代码有问题。 我需要输入一个用enter按钮分隔的名字列表。 当用户输入单词“QUIT”时,输入停止。 程序需要按字母顺序打印名称列表(所有字母均为小写)。
名称数量以及每个名称的长度未知,需要动态分配。此外,如果名称在输入中出现多次,则它只应在输出中出现一次。
这是代码运行方式的示例:
Please enter a list of names:
john
chris
ben
chris
david
QUIT
有4个名字:
ben
chris
david
john
我考虑过使用动态分配的指针数组,其中每个指针都包含每个名称并且是动态分配的。问题是我不知道如何编写它而不会出现运行时错误。
注意:此时,我不允许使用我尚未学过的东西,比如结构和递归,并且只能使用库stdio.h,stdlib.h和string.h。
提前致谢。
这是代码(它不完整,但此时我收到运行时错误):
char **nameList;
int i = 0, j = 0, size = 0, check = 0;
printf("Please enter list of names:\n");
//allocate one cell of memory to the list
nameList = (char**)malloc(sizeof(char));
if (nameList == NULL)
{
printf("Cannot allocate Memory");
return 0;
}
//Add the first letter to the first string in the array
nameList[i][j] = getchar();
size += sizeof(char);
while (check != 1)
{
//check if current entered letter is not an enter
while (nameList[i][j] != '\n')
{
//allocated another char sized memory to the string
nameList = (char**)realloc(nameList, (size + sizeof(char)));
if (nameList == NULL)
{
printf("Cannot allocate Memory");
return 0;
}
j++;
//adding another char to the current string
nameList[i][j] = getchar();
size += sizeof(char);
}
j = 0;
if (nameList[i][j] == 'Q')
{
if (nameList[i][j + 1] == 'U')
if (nameList[i][j + 2] == 'I')
if (nameList[i][j + 3] == 'T')
check++;
}
i++;
}
答案 0 :(得分:0)
嗯......你为什么在那里使用'+'?而且你正在寻找错误价值的大小。nameList =(char **)realloc(nameList,(size + sizeof(char)));
这会分配一个指针数组。但是指向这里的指针是什么?