如何处理警告已弃用从字符串常量转换为char *?

时间:2014-06-03 23:38:53

标签: c++ warnings gsl

我写了一个关于计算协方差的简单程序。 数据从txt文件中读取并转换为矩阵。然后协方差由函数calcov()计算。

警告deprecated conversion from string constant to char [-Wwrite-strings]printmatrix("cov.txt",cov);行出现。我在这里检查了类似的问题,但我仍然无法找到我出错的地方,所以我发布了它。我希望我能搞清楚。

void calCov(gsl_matrix* data,gsl_matrix* cov,int p)
{
  for(int i=0;i<p;i++){
    for(int j=0;j<p;j++){
      gsl_vector_view a = gsl_matrix_column (data, i);
      gsl_vector_view b = gsl_matrix_column (data, j);
      gsl_matrix_set(cov,i,j,gsl_stats_covariance(a.vector.data, a.vector.stride,b.vector.data, b.vector.stride, a.vector.size));
    }
  }
}
int main()
{
  int n = 158; //sample size
  int p = 51; //number of variables
  int i;
  char datafilename[] = "erdata.txt";
  //allocate the data matrix
  gsl_matrix* data = gsl_matrix_alloc(n, p);
  //read the data
  FILE* datafile = fopen(datafilename, "r");
  fclose(datafile);

  gsl_matrix* cov = gsl_matrix_alloc(p, p);
  calCov(data,cov,p);
  printmatrix("cov.txt",cov);}

1 个答案:

答案 0 :(得分:1)

printmatrix的第一个参数声明为std::string或指向char const的指针。

顺便说一句,当问题出现在名为printmatrix的函数时,为什么不在示例代码中包含它。


background info:字符串文字"blah"的类型是5个char const值的数组(第五个是终止零)。在C中,窄字符串文字可以隐式转换为char*,这在第一个C ++标准C ++ 98中得到了支持,但已经被弃用了。在C ++ 11中删除了转换。