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

标签 c arrays string

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

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

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/

相关文章:

javascript - 访问数组中的 JavaScript 对象

javascript - AngularJS - 比较和替换两个数组之间的对象

java - Java 中的字符串联合

javascript - 在 JavaScript 中人性化字符串

java - 从 Java 中的字符串执行代码

c - C 中的类型转换 - Ints 和 Char*

c - 增加 int 指针值 - 不起作用

c - 从文件中读取矩阵并计算行列式(C 语言)

c++ - 我们能否创建一个类似 scanf 的函数,在填充所有参数时返回 true,否则返回 false,而无需遍历所有变量?

javascript - 从路径字符串优化嵌套数组