Saya perlu meneruskan argumen array ke fungsi dari main, namun saya tidak tahu mengapa itu hanya menurunkan elemen pertama dari array dan bukan seluruh array seperti yang diharapkan. Nilai dalam array berasal dari argv.

Dapatkah seseorang tolong tunjukkan kesalahan saya?

#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;
}
c
1
D Szum 9 Januari 2021, 07:15

2 jawaban

Jawaban Terbaik

char request[] tidak sama dengan char *request[MAXSTRING]. Yang pertama mendeklarasikan array karakter (yaitu string), yang terakhir array pointer ke char, yaitu array string.

Jadi nyatakan dengan benar dalam fungsi Anda:

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

Selanjutnya Anda akan membutuhkan cara untuk mendeteksi akhir dari array string yang terdapat dalam request. Berikan hitungan ke findMatches() atau atur agar string terakhir menjadi NULL. Jika menggunakan hitungan, Anda dapat mendefinisikan ulang fungsi untuk menerima hitungan:

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

Dan menyebutnya seperti ini:

findMatches("filename.txt", request, agrc-1);

Juga, penggunaan MAXSTRING di char *request[MAXSTRING] tampaknya membingungkan. Anda tampaknya menginginkan array string, tetapi MAXSTRING tampaknya merupakan panjang maksimum string. Kecil kemungkinan Anda akan memiliki 1000 argumen untuk program Anda.

3
mhawke 9 Januari 2021, 04:39

Melewati array di C sama dengan melewatkan pointer. Anda tidak mendapatkan panjangnya, fungsi hanya melihatnya sebagai char *

Anda juga ingin memasukkan ukuran atau panjangnya, atau membungkusnya dalam struct dan memasukkan struct.

1
mydisplayname 9 Januari 2021, 04:23