因此,我尝试在 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/