将字符串数组作为函数参数传递

时间:2020-01-15 05:42:19

标签: c++ arrays string function

我有一个函数cost,该函数使用浮点数数组和字符串数组进行几种计算:

const int numofparticles = 20;
const int numofdims = 46;
const int numforn = 222;
const int forn_sem_repet = 92;
const int ct = 102;

using namespace std; 
 float cost(float x[numofdims], float M[numofdims][numforn], char prod[numofdims][ct], char forn_list[numforn][ct], float qtde[numofdims][1], float min_prices[forn_sem_repet][1], char min_forn[forn_sem_repet][ct]){
    float v = 0;
// does stuff
// ...
    return v


在函数main中,变量是从文件中加载的:

int main(){
    std::ifstream in("M.txt");
    std::string line;

    float M[numofdims][numforn];
    int i = 0, k = 0;

    while (std::getline(in, line))
    {
        float value;
        int k = 0;
        std::stringstream ss(line);

        while (ss >> value)
        {
            M[i][k] = value;
            ++k;
        }
        ++i;
    }

    i=0;

    char* prod[numofdims];
    char linee[102];

    FILE *file;
    file = fopen("prod.txt", "r");

    while(fgets(linee, sizeof linee, file)!=NULL) {

        prod[i]=strdup(linee); 
        i++;
    }


    unsigned int number_of_lines = 0;
    FILE *infile = fopen("forn_list.txt", "r");
    int ch;

    while (EOF != (ch=getc(infile)))
        if ('\n' == ch)
            ++number_of_lines;


    int j=0;
    int num=0;
    char* forn_list[number_of_lines];
    char line_forn[102];

    FILE *file_forn;
    file_forn = fopen("forn_list.txt", "r");

    while(fgets(line_forn, sizeof line_forn, file_forn)!=NULL) {
        forn_list[j]=strdup(line_forn); 

        j++;

    }



    std::ifstream inn("qtde.txt");
    std::string line3;

    float qtde[numofdims][1];
    int ii = 0, kk = 0;

    while (std::getline(inn, line3))
    {
        float value;
        int kk = 0;
        std::stringstream ss(line3);

        while (ss >> value)
        {
            qtde[ii][kk] = value;
            ++kk;
        }
        ++ii;
    }
    for(i=0;i<46;i++){
        for(j=0;j<1;j++){
        }

    }

    std::ifstream in_min_prices("min_prices.txt");
    std::string line_min_prices;

    float min_prices[forn_sem_repet][1];
    int iii = 0, kkk = 0;

    while (std::getline(in_min_prices, line_min_prices))
    {
        float value_min_prices;
        int kkk = 0;
        std::stringstream ss(line_min_prices);

        while (ss >> value_min_prices)
        {
            min_prices[iii][kkk] = value_min_prices;
            ++kkk;
        }
        ++iii;
    }

    j=0;
    char *min_forn[forn_sem_repet];
    char line_min_forn[102];

    FILE *file_min_forn;
    file_min_forn = fopen("min_forn.txt", "r");

    while(fgets(line_min_forn, sizeof line_min_forn, file_min_forn)!=NULL) {

        min_forn[j]=strdup(line_min_forn); 

        j++;
    }

     float x[46] = {  1.45733801,   5.4023114 ,   9.84244649,  15.63424831,
        18.54989641,  25.31747823,  31.02406554,  33.49572919,
        42.62398295,  48.89093797,  54.92222913,  64.81761377,
        67.91368849,  75.25842566,  80.76891534,  84.16383935,
        86.98898142,  92.46614131,  95.171554  ,  98.5018263 ,
       100.66458007, 106.27617827, 113.53476385, 120.35501434,
       124.50124045, 126.93877296, 133.38186583, 139.5347655 ,
       149.73161149, 155.68895627, 158.55511946, 165.81101556,
       172.92551422, 176.92861446, 181.29821916, 182.56432251,
       185.22709498, 187.98060952, 191.70461679, 193.87301843,
       198.86751373, 203.25597481, 210.26505926, 216.52723747,
       219.20956646, 220.61524748};

       float v = cost( x, M, prod,forn_list, qtde, min_prices, min_forn);

}

然后,在主函数中,加载所有变量后,我将函数称为cost:

float v = cost( x, M, prod,forn_list, qtde, min_prices, min_forn);

然后我得到以下错误:

错误:参数...无法将'char **'转换为'char(*)[102]'

给出错误的参数全为char。这些变量当然是字符串数组。我试图通过指针解决此问题:

float cost(float x[numofdims], float M[numofdims][numforn], char *prod[numofdims], char *forn_list[numforn], float qtde[numofdims][1], float min_prices[forn_sem_repet][1], char *min_forn[forn_sem_repet])

但是我得到

分段错误(核心已转储)

我想知道为什么会这样以及如何解决。

1 个答案:

答案 0 :(得分:0)

char prod [numofdims] [ct]-类型强,大小:prod中的所有字符串均为102个char大小(零个char时,实际字符串可以更少,但您为每个字符串分配102个char)。而且此类型不能转换为char **(此类型是指向char数组的指针的数组)-这些是不同的类型。

最好使用字符串向量。或者,您可以创建大小为102 * n的字符数组并“手动”填充。

相关问题