gpt4 book ai didi

在 C 中使用 malloc 创建字符串数组

转载 作者:行者123 更新时间:2023-12-04 12:28:57 28 4
gpt4 key购买 nike

我对 C 完全是新手,刚刚了解了使用 malloc、realloc、calloc 和 free 进行动态内存分配。

我想制作一个小程序,它接受一个 int 数字作为将给出的字符串的数量,然后“扫描”它们。接下来弹奏这些弦。例如找到最常见的并打印它。
例如,当我运行程序并输入:
5
车屋狗树树
它应该打印:
树 2

我想要 scanf-printf 因为这是我目前最熟悉的输入/输出方法。
我的代码:

int main (){

int N,i,j ;

char *array;

int *freq;


scanf("%d",&N);

array = (char*)calloc(N,sizeof(char*));
for (i=0;i<=N;i++){
scanf( ??? );
}

free(array);
return 0;
}

我应该在 scanf 函数中输入什么才能正确地用字符串填充数组?填充后,我会使用 strcmp 和 for 循环之类的东西来扫描数组并找到最常见的单词吗? (我可以将频率存储在 *freq 中)

最佳答案

您想要分配一个字符串数组,换句话说,一个指向字符的指针数组,而这正是您所分配的。问题在于您将 calloc 返回的指针分配给一个字符数组。

实际上你有两个选择:要么将 array 的声明更改为指向字符的“数组”指针,例如char **array,然后动态分配各个字符串。像这样的事情

// Allocate an array of pointers
char **array = calloc(N, sizeof(*array));

// Allocate and read all strings
for (size_t i = 0; i < N; ++i)
{
// Allocate 50 characters
array[i] = malloc(50); // No need for `sizeof(char)`, it's always 1

// Read up to 49 characters (to leave space for the string terminator)
scanf("%49s", array[i]);
}

或者您可以更改数组的类型,使其成为指向固定大小“字符串”的指针,如下所示

// Define `my_string_type` as an array of 50 characters
typedef char my_string_type[50];

// Declare a pointer to strings, and allocate it
my_string_type *array = calloc(N, sizeof(*array));

// Read all strings from the user
for (size_t i = 0; i < N; ++i)
{
// Read up to 49 characters (to leave space for the string terminator)
scanf("%49s", array[i]);
}

请注意,我 don't cast the result of calloc or malloc 。您永远不应该在 C 中强制转换 void *

关于在 C 中使用 malloc 创建字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33843193/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com