将数组作为参数传递给C中的函数

将数组作为参数传递给C中的函数,c,C,我需要从main向函数传递一个数组参数,但是我不明白为什么它只传递数组的第一个元素,而不是像预期的那样传递整个数组。数组中的值来自argv 有人能指出我的错误吗 #define MAXSTRING 1000; int findMatches (const char *filename, char request[]) { // iterating over request[] is giving individual characters of the first word, not

我需要从main向函数传递一个数组参数,但是我不明白为什么它只传递数组的第一个元素,而不是像预期的那样传递整个数组。数组中的值来自argv

有人能指出我的错误吗

#define MAXSTRING 1000;

int findMatches (const char *filename, char request[]) {

    // iterating over request[] is giving individual characters of the first word, not all words. 
    // expected to have a full array of input words.
    
    int len = strlen(request);

    for (int i = 0; i < len; i++) {
        printf("%s \n", request[i]); 
    }
}

int main (int agrc, char *argv[]) {

    char *request[MAXSTRING];
    int index = 0;

    for (int i = 1; i < agrc; i++) {
        request[index] = argv[i];
        index++;
    }

    findMatches("filename.txt", request);

    return 0;
}
#定义MAXSTRING 1000;
int findMatches(常量字符*文件名,字符请求[]){
//对请求[]进行迭代是给出第一个单词的单个字符,而不是所有单词。
//应该有一个完整的输入字数组。
int len=strlen(请求);
对于(int i=0;i
在C中传递数组与通过指针传递相同。您无法获取长度,函数仅将其视为
char*


您还需要传入大小或长度,或者将其包装在结构中并传入结构。

在C中传递数组与通过指针传递相同。您无法获取长度,函数仅将其视为
char*


您也可以传递大小或长度,或者将其包装在结构中并传递该结构。

对于在C中作为参数传递数组,您应该作为
(array[],array_size)
传递,因为它将数组视为指针。因此,如果您也传递
array\u size
,您将更容易理解。

对于在C中作为参数传递数组,您应该传递为
(array[],array\u size)
,因为它将数组视为指针。因此,如果您也传递
array\u size
,您将更容易理解。

char request[]
char*request[MAXSTRING]
不同。前者声明字符数组(即字符串),后者声明指向字符的指针数组(即字符串数组)

因此,请在函数中正确声明它:

int findMatches (const char *filename, char *request[]) {
接下来,您需要一种方法来检测
请求中包含的字符串数组的结尾。将计数传递给
findMatches()
或将最后一个字符串安排为NULL。如果使用计数,可以重新定义函数以接受计数:

void findMatches (const char *filename, char *request[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%s \n", request[i]);
    }
}

此外,在
char*request[MAXSTRING]
中使用
MAXSTRING
似乎有些混乱。您似乎需要字符串数组,但
MAXSTRING
似乎是字符串的最大长度。您的程序不太可能有1000个参数。

char request[]
char*request[MAXSTRING]
不同。前者声明字符数组(即字符串),后者声明指向字符的指针数组(即字符串数组)

因此,请在函数中正确声明它:

int findMatches (const char *filename, char *request[]) {
接下来,您需要一种方法来检测
请求中包含的字符串数组的结尾。将计数传递给
findMatches()
或将最后一个字符串安排为NULL。如果使用计数,可以重新定义函数以接受计数:

void findMatches (const char *filename, char *request[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%s \n", request[i]);
    }
}

此外,在
char*request[MAXSTRING]
中使用
MAXSTRING
似乎有些混乱。您似乎需要字符串数组,但
MAXSTRING
似乎是字符串的最大长度。程序不太可能有1000个参数。

//len是数组的长度。不要用文字描述,而是显示定义和设置
len
的实际代码。我打赌这是不对的。传递给函数的数组衰减为指针
sizeof
将不起作用-您是否使用
sizeof
获取
len
?另外
char request[]
应该是
char*request[]
。编译器应该就此向您发出警告。始终注意编译器警告。
requests[i]
没有定义
requests
变量,因此不会编译该变量。显然,您没有显示重现问题的实际代码。下一次,请确保将真实代码发布为。如果使用gcc或clang编译,请使用
-Wall-Wextra-Werror
编译。然后查看我的第二条评论。应该有多个警告提醒您代码中的问题。
//len是数组的长度
。不要用文字描述,而是显示定义和设置
len
的实际代码。我打赌这是不对的。传递给函数的数组衰减为指针
sizeof
将不起作用-您是否使用
sizeof
获取
len
?另外
char request[]
应该是
char*request[]
。编译器应该就此向您发出警告。始终注意编译器警告。
requests[i]
没有定义
requests
变量,因此不会编译该变量。显然,您没有显示重现问题的实际代码。下一次,请确保将真实代码发布为。如果使用gcc或clang编译,请使用
-Wall-Wextra-Werror
编译。然后查看我的第二条评论。应该有多个警告提醒您代码中的问题。