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**解决很多问题和错误,这些问题和错误应该得到解决:

  • int main{}应该至少int main(void){}你需要(void)
  • 不检查scanf错误
  • nullptr这是c++关键字,应该是NULL
  • 最重要的是free您的malloc饮食方式。
  • castingmalloc并不总是一个好主意,请阅读此内容

您的代码应如下所示:

#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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C char *,char **,char ***,打印和释放麻烦

来自分类Dev

C中char []和char *之间的区别

来自分类Dev

C结构中char *和char []的区别

来自分类Dev

比较char *和char

来自分类Dev

const char **和char **

来自分类Dev

比较char *和char

来自分类Dev

C函数和char *

来自分类Dev

C ++在初始化char []和char之后,char显示在char []中

来自分类Dev

在 C11 中,字符串文字为 char[]、unsigned char[]、char* 和 unsigned char*

来自分类Dev

C ++ char * []到char **的转换

来自分类Dev

遍历char数组并打印char

来自分类Dev

遍历char数组并打印char

来自分类Dev

了解char *,char []和strcpy()

来自分类Dev

了解char *,char []和strcpy()

来自分类Dev

char *和char []之间的区别

来自分类Dev

char **和char [] []之间的区别

来自分类Dev

char [] c和char c []有什么区别?

来自分类Dev

从C中的char数组中的'('和')'内部提取char

来自分类Dev

C如何在char数组中解析int和char?

来自分类Dev

c-const char *和char *强制转换(ADPCM解码)

来自分类Dev

文件到char和char到数组C

来自分类Dev

如何在C中将char *释放

来自分类Dev

如何从C中的char数组释放内存

来自分类Dev

如何在C中正确释放char **

来自分类Dev

c - 如何从C中的char *访问char []?

来自分类Dev

java中char的麻烦

来自分类Dev

释放Char *的动态数组

来自分类Dev

C ++从char *到char的无效转换(char * = * string.begin())

来自分类Dev

将char与C ++列表中的char比较