【问题标题】:Creating a char** of words read in from getline() in C在 C 中创建从 getline() 读入的单词的 char**
【发布时间】:2018-09-18 00:33:01
【问题描述】:

我正在尝试创建从 getline() 读取的单词的动态字符**

while ((lineLength = getline(&line, &n, stdin)) != -1) {
    if(lineLength > 0)
    {
        if(line[lineLength - 1] == '\n')
        {
            line[lineLength - 1] = '\0';
        }
    }
}

但我在使用 malloc() 创建元素并为其动态分配内存时遇到问题。我目前正在尝试

char** words = (char**)malloc(x*sizeof(char));

但我遇到了错误。实现这一目标的最佳方法是什么?

【问题讨论】:

  • 如果它是动态的,你不能提前初始化它,你会在收到更多数据时分配。
  • 我认为您需要发布更多实际代码,因为很难用您发布的数量制定明确的答案。但是,我相信你真正想要的是:char** words = malloc(x * sizeof(char *)); 然后,你会想要循环(例如)for (i = 0; i < x; ++x) words[i] = strdup(...);。这不是完整的解决方案,但可能更接近
  • 我认为要求“创建一个字符**”表明您走错了路。它不是你需要创建的双指针,而是它背后的复杂数据结构。
  • sizeof (char) 为 1。sizeof (char*) 几乎从不为 1。HTH。

标签: c arrays pointers char


【解决方案1】:

sizeof(char)sizeof(char*) 不同。 sizeof(char) 一般为 1,而指针的大小是实现定义的,但总是大于那个。您确实没有为指针分配足够的空间。因为你有一个指针的指针,我认为你真正想要的代码是

char** words = (char**)malloc(x*sizeof(char*));

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2021-11-30
    • 2020-07-20
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多