C 中的参数顺序



所以,我正在使用一些C代码。我定义了以下函数:

int load_csv(size_t L, size_t W, CSV_DATA csv_data[L][W], char file[])

如果我调用此函数,一切正常。

但是,如果我更改前两个参数的顺序,以便函数定义如下:

int load_csv(size_t W, size_t L, CSV_DATA csv_data[L][W], char file[])

当我尝试将数据保存到csv_data时,我遇到段错误。谁能深入了解为什么在结构参数(在本例中为csv_data(之前定义的参数必须以相同的顺序进行推理?

编辑:根据要求,这是整个功能:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
    enum { is_int, is_float, is_char } type;
    int ival;
    char cval[10];
    float fval;
}CSV_DATA;
int load_csv(size_t L, size_t W, CSV_DATA csv_data[L][W], char file[])
{ 
   char buffer[1024] ;
   char *record,*line;
   int i = 0;
   FILE *fstream = fopen("iris.csv","r");
   if(fstream == NULL)
   {   
      printf("n file opening failed ");
      return -1 ;
   }   
   while((line=fgets(buffer,sizeof(buffer),fstream))!=NULL)
   {   
    int j = 0;
     record = strtok(line,",");
     printf("%s", record);
     while(record != NULL)
     {   
        csv_data[i][j].type = is_char;
        for (int k=0; k < strlen(record); k++){ 
          csv_data[i][j].cval[k] = record[k];//record;          
        }   
        j++;
     record = strtok(NULL,",");
     //printf("%s", record);
     }   
     ++i;
   }   
  return 0;
}

编辑:这是调用代码。虽然..我没有在调用函数的任何地方使用 L 或 W......

int main(){
        int L = 500;
        int W = 50; 
        CSV_DATA csv_data[500][50];
        char file[10] = "iris.csv";
        load_csv(L ,W , csv_data, file);
        return 0;
}

如果在函数定义中交换参数的顺序,则还需要在数组参数声明或函数调用中交换它们。 IOW,如果您更改

int load_csv(size_t L, size_t W, CSV_DATA csv_data[L][W], char file[])

int load_csv(size_t W, size_t L, CSV_DATA csv_data[L][W], char file[])

然后,您还需要更改csv_data声明:

int load_csv(size_t W, size_t L, CSV_DATA csv_data[W][L], char file[])

或者您需要更改函数调用中的参数顺序:

load_csv(L, W, csv_data, file);

load_csv(W, L, csv_data, file);

否则,load_csvcsv_data的维度将与main中的csv_data维度相反,导致在某些时候超出范围的数组访问。

顺序应该无关紧要 - 更有可能是你对函数内已更改的值所做的事情 - 您是否更改了调用函数的值的顺序?

相关内容

  • 没有找到相关文章

最新更新