【发布时间】:2016-03-02 11:37:40
【问题描述】:
我正在学习如何在 C 中使用指针(使用 malloc 和 free),但我在这个练习中遇到了一些麻烦。我只想制作一个指针数组,我想在其中保存每个单词的方向。然后我想为一个特定的单词做一个 free() ,但是这个 free 让我的程序崩溃了。
int main
{
printf("Introduce how many words do you want. \n");
scanf("%d", &numWords);
getchar();
char ***array = (char***)malloc(sizeof(char**) * numWords);
if (array == nullptr)
{
exit(1);
}
for (int i = 0; i < numWords; i++) array[i] = (char**)malloc(sizeof(char*)) ;
for (int i = 0; i < numWords; i++)
{
printf("Enter your word number %d: \n", i + 1);
scanf("%s", &(array[i]));
getchar();
}
for (int i = 0; i < numWords; i++)
{
printf("%s \n", &(array[i]));
}
free(array[1]);
printWord(array[2])
}
另外,我想做这个功能,因为我想打印单词的每个字符,前面有一个空格。它也会让我的程序崩溃。
void printWord(char **array)
{
for (int i = 0; i < strlen(*array); i++) printf("%c ", &((*array)[i]));
}
不知道如何集中注意力。你有什么推荐给我的?你发现我的代码有什么问题吗?谢谢。
【问题讨论】:
-
我想你误解了
scanf的工作原理。 -
将字符串视为
char *,将字符串数组视为char **。现在想想在哪里,例如char ***在这个方案中是有意义的。 -
@JoachimPileborg:告诉初学者
char *是一个字符串(或数组)是个坏主意。他们应该从一开始就知道指针和数组是不同的类型(而C没有特殊的string类型)。 -
C 没有 nullptr 关键字。它是 C++ 关键字。