将数组作为参数传递给C中的函数
我需要从main向函数传递一个数组参数,但是我不明白为什么它只传递数组的第一个元素,而不是像预期的那样传递整个数组。数组中的值来自argv 有人能指出我的错误吗将数组作为参数传递给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
#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
编译。然后查看我的第二条评论。应该有多个警告提醒您代码中的问题。