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

二维数组的最简单方法(显然,您可以 typedef 您的数组):

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 只打印一个单词,所以你需要将 notify 更改为

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

但是,您调用 notify 的方式也可能不会产生您想要的结果。

notify(words[max_row_size]);

将尝试让您获得 10 个单词中的第 100 个单词。这可能会导致崩溃。

您可能希望将 notify last 放在 while 循环中并像这样调用它

notify(words[i]);

此外,如果你的字典中有超过 10 个单词,你就有麻烦了。您可能想尝试使用向量而不是数组(因为向量可以动态增长)。

于 2013-05-17T09:02:26.853 回答
0
notify(char words[][max_row_size])

将整个数组向下传递

然后notify(words);用来调用方法

但实际上你应该使用标准容器而不是数组

于 2013-05-17T09:22:14.233 回答