C - 创建和使用结构数组?错误 : expected identifier or '(' before '[' token

标签 c arrays struct typedef

因此,我尝试在 C 中构建和使用结构数组,但遇到了一些我无法解决的错误。我的代码是:

int numWords = 10;

typedef struct
{
    char* word;
    int count;
} wordsCount;

wordsCount words[numWords];

words[0].word = "Hello";
words[0].count = 1;

首先,在 Unix 中使用 gcc 编译器时,当使用 -Wall -pedantic -ansi 标志进行编译时,我收到一条警告,内容为 warning: ISO C90 forbids variable length array 'words' [- Wvla]。对于我的代码片段的最后两行,我收到错误:error: expected identifier or '(' before '[' token.

谁能告诉我为什么会出现这些错误?我用谷歌搜索了许多不同的 typedef 和 struct 示例,我的示例与这些示例类似。


编辑: 谢谢大家的建议。我决定编辑我的帖子,而不是回复每个单独的评论来澄清我的问题。所以,我现在明白你不能在 C 中使用可变长度数组。我不能正式接受任何提供的答案,因为我的问题仍然存在,所以有必要更清楚地解释我正在尝试做的事情。

我正在创建一个程序,它计算文本文件中每个单词的出现次数,并以 ASCII 顺序打印出来。例如,如果文本文件包含以下文本:"Buffalo buffalo Buffalo buffalo buffalo buffalo buffalo buffalo"is a grammatically correct sentence.,程序的输出应为:

水牛城 - 3 一个 - 1 水牛 - 5 正确 - 1 句子 - 1.

单词本身已经存储在一个数组中。所以我想创建一个包含单词和计数的结构数组。我修改了我的程序以说明动态分配的内存。我更新的代码是:

typedef struct
{
    char* word;
    int count;
} wordsCount;

wordsCount** words = malloc(sizeof(*words) * numWords);

words[0]->word = "Hello";
words[0]->count = 2;

printf("%s - %d\n", words[0]->word, words[0]->count);

*请注意,numWords 是一个整数,它会根据文本文件的大小而变化。

它编译得很好;但是,我在第一个赋值语句 words[0]->word = "Hello"; 处收到一个段错误。

我假设我可以创建一个指向结构指针的指针是错误的吗?我认为 `->' 运算符执行结构指针的引用,然后指向成员“word”。我不明白为什么我会出现段错误。任何帮助,将不胜感激。如果进行此编辑需要一个新线程,请告诉我,以便我移动它。谢谢。

编辑 2 我想通了这个问题 - 我很高兴指针并且使用了太多指针来做我想做的事。我将 wordsCount** words = malloc(sizeof(*words) * numWords); 更改为 wordsCount* words = malloc(sizeof(*words) * numWords);。然后我意识到我在执行 words[0]->word = "Hello"; 时进行了必要的取消引用,所以我将其更改为 words[0].word = "Hello";,它完美地工作。谢谢你们的帮助,伙计们。我不确定如何关闭话题,或者我是否应该发布对我自己的问题的回答?但是这个线程现在已经关闭了。

最佳答案

#define NUM_WORDS 10

typedef struct
{
  char* word;
  int count;
} wordsCount;

wordsCount words[NUM_WORDS];

这将充分分配您开始赋值所需的内存。

关于C - 创建和使用结构数组?错误 : expected identifier or '(' before '[' token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874843/

相关文章:

c - 字符串比较的空白问题

c - 使用结构将内存分配给结构

c - 强制调用 libgcc

c - 如何在 C 中使用 memcpy() 将数组复制到数组

c++ - 使用 minizip/zlib 从 zip 存档加载文本文件,文件末尾有垃圾字符

python - 测量 numpy 2d 区域之间的边界重叠

arrays - 查找字符串是否在二维 VBA Excel 数组中

javascript - 以不可变的方式过滤作为对象属性的数组

ios - 函数中缺少返回 - 模型中出现快速错误

c - 制作我自己的 strlen 函数,以接收字符串作为链接列表