gpt4 book ai didi

c - 填充动态 c 数组时遇到问题

转载 作者:行者123 更新时间:2023-11-30 14:28:50 24 4
gpt4 key购买 nike

我在填充动态创建的字符串数组时遇到问题。该数组基本上包含两个字符串,我想打印它们及其长度。我得到一个非常奇怪的结果,内存位置变得困惑。请参阅下面的代码。

如有任何建议,我们将不胜感激。谢谢。

void printWords(char **words, int numberOfWords)
{
int index;

for (index = 0; index < numberOfWords; index++)
{
printf("%s, %d\n", &(*words)[index], (int)strlen(&(*words)[index]));
}
}


void fillWords(char **words)
{
*words = malloc(2 * sizeof(char *));

char hello[] = {"Hello"};
(*words)[0] = (char)malloc(strlen(hello) * sizeof(char));
strcpy(&(*words)[0], hello); //Copy word into array

char world[] = {"Worldz"};
(*words)[1] = (char)malloc(strlen(world) * sizeof(char));
strcpy(&(*words)[1], world); //Copy word into array
}


int main (int argc, const char * argv[])
{
char *words;

fillWords(&words);
printWords(&words, 2);

return 0;
}

预期输出应该是

Hello, 5
Worldz, 6

但是我越来越

HWorldz, 7
Worldz, 6

最佳答案

我认为您对 char *char ** 感到困惑。

此外,请确保为字符串末尾的空终止字符分配足够的内存。

这是我的解决方案:

#include <stdio.h>
#include <string.h>
#include <malloc.h>

void printWords(char **words, int numberOfWords)
{
int index;

for (index = 0; index < numberOfWords; index++)
{
printf("%s, %d\n", words[index], (int)strlen(words[index]));
}
}

char ** createWords()
{
char ** words;

// Allocate memory for an array of pointers, length 2.
words = malloc(2 * sizeof(char *));

char hello[] = {"Hello"};
words[0] = malloc((strlen(hello)+1) * sizeof(char));
strcpy(words[0], hello); //Copy word into array

char world[] = {"Worldz"};
words[1] = malloc((strlen(world)+1) * sizeof(char));
strcpy(words[1], world); //Copy word into array

return words;
}


int main (int argc, const char * argv[])
{
char **words;

words = createWords();
printWords(words, 2);

return 0;
}

我将 fillWords 重命名为 createWords 并使其返回一个指针,而不是将指针作为参数。如果您确实希望 fillWords 将指针作为参数,您可以这样做,但参数必须是 char *** 类型。

关于c - 填充动态 c 数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525626/

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