2

少しプログラムを書いたのですが、二次元配列words[10][max_row_size]を function に渡すことができませんnotify。できれば助けてください。
コードの一部を添付します。

#include <iostream>
#include <cstdlib> 
#include <fstream> 
#include <string.h>
#include <unistd.h>
using namespace std;
#define max_row_size 100
int notify(char words[max_row_size]);

int main(void) {
    ifstream dictionary("dictionary.txt");
    //ditrionary looks like 
    //hello-world
    //universe-infinity
    //filename-clock
    string s;
    int i=0;
    char words[10][max_row_size];
    while(!dictionary.eof()){
        dictionary>>s;
        strcpy(words[i++],s.c_str());
    }
        notify(words[max_row_size]);

    return 0;
}

int notify(char words[max_row_size]){
        cout<<words[1];
    return 0;
}

これは私のプログラムの完全なコードです。

エラーです
/home/rem/projects/github/notify_words/notify_words.cpp: В функции «int notify(int, char*)»:
/home/rem/projects/github/notify_words/notify_words.cpp:65:113: предупреждение: format «%s» expects argument of type «char*», but argument 3 has type «int» [-Wformat]

4

4 に答える 4

0

単語を単独で渡します:char** wordsは関数内の引数です: つまり

int notify(char** words){...
于 2013-05-17T08:55:51.047 に答える
0

notify で 1 単語だけを出力するようにしたいので、notify を次のように変更する必要があると思います。

int notify(char* word){
    cout<<word;
    return 0;
}

しかし、通知を呼び出す方法も、おそらくあなたが望んでいる結果をもたらさないでしょう。

notify(words[max_row_size]);

は 10 語のうち 100 番目の単語を取得しようとします。これはおそらくクラッシュを引き起こします。

while ループの最後に notify を配置し、次のように呼び出したいと思うでしょう。

notify(words[i]);

また、辞書に10語以上入っていると困ります。配列の代わりにベクトルを試してみることをお勧めします(ベクトルは動的に大きくなる可能性があるため)。

于 2013-05-17T09:02:26.853 に答える
0

2 次元配列の最も簡単な方法 (明らかに、配列を型定義できます):

int notify(std::array<std::array<char, max_row_size>, 10>& words){
    std::cout << words[1];
    return 0;
}

文字列の配列の場合は最も簡単です:

int notify(std::array<std::array<std::string>, 10>& words){
    std::cout << words[1];
    return 0;
}

このようにして、配列が関数内のポインターに減衰するのを防ぐため、サイズはまだわかっています。

于 2013-05-17T09:04:06.417 に答える
0
notify(char words[][max_row_size])

配列全体を渡す

次にnotify(words);、メソッドを呼び出すために使用します

しかし、実際には、配列の代わりに標準のコンテナーを使用する必要があります

于 2013-05-17T09:22:14.233 に答える