[英]Passing an Array as Argument to Function in C
我需要將數組參數從 main 傳遞給 function,但是我無法弄清楚為什么它只傳遞數組的第一個元素而不是預期的整個數組。 數組中的值來自 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;
}
char request[]
與char *request[MAXSTRING]
。 前者聲明一個字符數組(即字符串),后者聲明一個指向char的指針數組,即字符串數組。
所以在你的 function 中正確聲明它:
int findMatches (const char *filename, char *request[]) {
接下來,您將需要一種方法來檢測request
中包含的字符串數組的結尾。 將計數傳遞給findMatches()
或將最后一個字符串安排為 NULL。 如果使用計數,您可以重新定義 function 以接受計數:
void findMatches (const char *filename, char *request[], int n) {
for (int i = 0; i < n; i++) {
printf("%s \n", request[i]);
}
}
並這樣稱呼它:
findMatches("filename.txt", request, agrc-1);
此外,在char *request[MAXSTRING]
中使用MAXSTRING
似乎很混亂。 您似乎想要一個字符串數組,但MAXSTRING
似乎是字符串的最大長度。 您的程序不太可能有 1000 個 arguments。
在 C 中傳遞 arrays 與通過指針傳遞相同。 您不知道長度,function 僅將其視為char *
您也需要傳遞大小或長度,或者將其包裝在結構中並傳遞結構。
為了將 arrays 作為 C 中的參數傳遞,您應該將其作為(array[], array_size)
傳遞,因為它只是將其視為指針。 因此,如果您也傳遞array_size
,您將更容易理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.