-1

我正在尝试创建一个 struct 类型的数组,但是一旦我创建了它,我在分配和访问其中的数据时遇到了一些麻烦。我对 C 语言的功能有基本的了解,但我还是很陌生。

这是我对结构和数组的声明:

typedef struct search{ 
    char word[10];
};

struct search words[40];

我第一次需要使用数组是我需要在第一个元素中存储一个字符串(来自命令行参数)。从句法和理论上讲,我的错误是什么?

words[0] = *argv[count]; //It says I can't assign char to struct words

下次我需要访问它是在一个函数内。第一行是我如何调用函数,然后我将发布函数原型,然后是里面给我带来麻烦的行。如果我需要澄清该结构,请告诉我。

parseSearchWords(words); // function call


int parseSearchWords(struct search *word); // function prototype


word[0][0] = 'a';// THe lines giving me the errors
printf("%s\n", *word[0][0]);

尽管我确信该语句有什么问题很明显,但错误是:下标值既不是数组也不是指针也不是向量。

感谢您的帮助,如果我能澄清任何事情,请告诉我。

4

2 回答 2

1

从句法和理论上讲,我的错误是什么?

searchWords[0] = *argv[count]; //它说我不能将char分配给结构词

argv[count]您应该将字符串复制到searchWords[0]. 这searchWords[0]是一个数组,它不是一个指针,所以它不能指向 argv 字符串。请参考以下链接查看指针和数组的差异:*(a++) 给出错误但不是 *(a+1)?? 数组名称在哪里?

argv[count]您可以通过这种方式将字符串复制 到searchWords[0]

strcpy(searchWords[0], argv[count]);

我认为你的意思是words[0]而不是searchWords[0]。如果这种情况下你不能通过这种方式访问​​第一个数组。它应该是words[0].word。所以副本会是这样的

strcpy(words[0].word, argv[count]);
于 2013-10-07T08:21:28.940 回答
0
struct search { 
    char word[10];
};

定义一个结构,该结构search包含一个char大小为 10 的数组作为成员。当你想访问char这个数组的元素(s)时,你需要显式访问这个成员:

int parseSearchWords(struct search *word) {
    ...
    word[0][0] = 'a';
    printf("%s\n", *word[0][0]);
}

应该:

int parseSearchWords(struct search *s) {
    ...
    s[0].word[0] = 'a';
    printf("%s\n", s[0].word);
}

和复制argv应该看起来更像这样:

struct search words[40];
int i = 0;
for (; i < argc; ++i) {
    strncpy(words[i].word, *argv[i], 9);
    words[i].word[9] = '\0';
}

如果您想使用typedef,那么我建议您使用比searchUpperCamelCase 更有意义的名称:

typedef struct search{ 
    char word[10];
} Word;

那么parseSearchWords函数的原型可能变成:

int parseSearchWords(Word *words)
于 2013-10-07T08:23:57.790 回答