【问题标题】:How to assign and access data from a struct of arrays in C如何在 C 中分配和访问数组结构中的数据
【发布时间】:2013-10-13 17:41:47
【问题描述】:

我正在尝试创建一个 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]);

虽然我确信该语句的问题很明显,但错误是:下标值既不是数组也不是指针也不是向量。

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

【问题讨论】:

  • 在使用数组之前,编写一个更简单 程序,其中只有一个search 类型的变量,并确保您了解that 的工作原理。

标签: c arrays string syntax struct


【解决方案1】:

我在句法和理论上的错误是什么?

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

您应该将argv[count] 字符串复制到searchWords[0]searchWords[0] 是一个数组,它不是一个指针,所以它不能指向 argv 字符串。指针和数组的区别请参考以下链接:*(a++) is giving error but not *(a+1)?? where a is array name?

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

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

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

strcpy(words[0].word, argv[count]);

【讨论】:

    【解决方案2】:
    struct search { 
        char word[10];
    };
    

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

    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,那么我建议你使用比search更有意义的名字,并用UpperCamelCase写:

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

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

    int parseSearchWords(Word *words)
    

    【讨论】:

    • 感谢您的帮助。
    • @Vayran:不客气 :) 看到我的编辑,我意识到你发送给parseSearchWords 的指针是你用argv 填充的那个words 数组的地址,对吧? :) 你访问它的元素的方式应该有点不同:)
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2015-04-23
    • 2012-01-22
    • 2020-07-27
    • 2018-06-08
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多