C char*,char**,char***,打印并释放故障



我正在学习如何在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]));
}

不知道如何集中注意力。你向我推荐什么?你发现我的代码有问题吗?非常感谢。

你把你的星星搞混了。这就是它的工作原理:

  • char*:字符串
  • char**:列表<string>
  • char***:列表<列表<字符串>>

再次检查您的代码,并检查每个printf("%s"…)是否对应于一个char*,每个print f("%c"…)对应于一个子字符。同时打开编译器中的所有警告,如果它有任何好处,它应该在您将错误的类型传递给printf()时警告您。

提示:main中的数组变量应该是char**,而不是char***。

您需要char**,并且有很多问题和错误需要修复:

  • int main{}应至少为int main(void){}您需要(void)
  • 不检查scanf的错误
  • nullptrc++关键字,应该是NULL
  • 最重要的是你free的方式就是你malloc的方式
  • casting malloc并不总是一个好主意,请阅读

你的代码应该是这样的:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
    long unsigned int numWords,i;
    char **array;
    printf("Introduce how many words do you want:> ");
    if((scanf("%lu", &numWords)) != 1){
        printf("Error, Fix it!n");
        exit(1);
    }
    array = malloc(sizeof(char*) * numWords * numWords);
    if (array == NULL)    {
        exit(2);
    }
    for (i = 0; i < numWords; i++){
         array[i] = malloc(sizeof(char*) * 100);
    }
    for (i = 0; i < numWords; i++){
        printf("Enter your word number %lu:> ", i + 1);
        if((scanf("%s", array[i])) != 1){
            printf("Error, Fix it!n");
            exit(3);
        }
    }
    for (i = 0; i < numWords; i++){
        printf("%s n", array[i]);
    }
    for (i = 0; i < numWords; i++){
         free(array[i]);
    }
    free(array);
    return 0;
}

输出:

Introduce how many words do you want:> 3
Enter your word number 1:> Michi
Enter your word number 2:> aloha
Enter your word number 3:> cool
Michi 
aloha 
cool

相关内容

  • 没有找到相关文章

最新更新