Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中分配和访问数组结构中的数据_C_Arrays_String_Syntax_Struct - Fatal编程技术网

如何在C中分配和访问数组结构中的数据

如何在C中分配和访问数组结构中的数据,c,arrays,string,syntax,struct,C,Arrays,String,Syntax,Struct,我试图创建一个struct类型的数组,但在创建之后,分配和访问数据时遇到了一些问题。我对C语言有基本的了解,但我还是个新手 以下是我对结构和数组的声明: typedef struct search{ char word[10]; }; struct search words[40]; 我第一次需要使用数组是在需要在第一个元素中存储字符串(来自命令行参数)时。我在语法和理论上的错误是什么 words[0] = *argv[count]; //It says I can't assig

我试图创建一个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]);
虽然我确信这条语句的错误很明显,但错误在于:下标值既不是数组,也不是指针,也不是向量

谢谢你的帮助,如果我能澄清什么,请告诉我

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

words[0] = *argv[count]; //It says I can't assign char to struct words
搜索词[0]=*argv[count]//它说我不能将char分配给struct 言语

您应该将
argv[count]
字符串复制到
搜索词[0]
中。
searchWords[0]
是一个数组,它不是指针,因此无法指向argv字符串。请参阅以下链接以查看差异指针和数组:

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

strcpy(searchWords[0], argv[count]);
我想你指的是
words[0]
而不是
searchWords[0]
。如果在这种情况下,您不能以这种方式访问第一个阵列。它应该是
words[0]。word
。所以副本将是这样的

strcpy(words[0].word, argv[count]);
定义一个结构
search
,该结构包含一个大小为10的
char
s数组作为成员。如果要访问此数组的元素(
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';
}
然后,
parseSearchWords
函数的原型可能会变成:

int parseSearchWords(Word *words)

在使用数组之前,请编写一个简单的程序,其中只包含一个
search
类型的变量,并确保您了解该变量的工作原理。谢谢您的帮助。@Vayran:不客气:)请参阅我的编辑,我意识到您发送到
parsearchwords
的指针是您用
argv
填充的
words
数组的地址(对吗?:)访问其元素的方式应该有所不同:)
int parseSearchWords(Word *words)