从字符串字面量转换为char *

3

我正在尝试使一些公开可用的线性代数代码中的C函数起作用。

公开可用的原型是...

int ilaenv_(int *, char *, char *, int *, int *,int *, int *);

公开可用的代码具有函数调用...
nb = ilaenv_(&c__1, "DGEQRF", " ", m, n, &c_n1, &c_n1); 

其中m,n,c_1和c_n1均为整数。

错误信息如下:

C++ 11 does not allow conversation from string literal to char *.

我没有创建这段代码,而是从LAPACK网站下载的。我不愿意对公开可用的代码做太多修改,因为担心引入错误。然而,我正在处理的程序中出现了一些函数的错误。

我该如何解决这个问题?


你可以强制转换常量性,但我不确定这是否是好的做法。 - Iharob Al Asimi
3
它真的说“conversation”吗?请使用实际的错误字符串,并修复标题。 - Eugene Sh.
请注意:这里有一些相关信息,虽然不是严格的重复,但可能会对您有所帮助:https://dev59.com/NXI-5IYBdhLWcg3wu7FU#1704433 - Adam
请提供精确的错误信息,复制并粘贴出来。不可能出现“conversation”这个词。 - Iharob Al Asimi
我猜你不能在C++11中谈论字符串字面量和char*。这种语言真是让人又气又无奈。 - thang
显示剩余2条评论
3个回答

8
您的函数接受的是 "char *",而不是 "const char *"。字符串字面值只能分配给 "const char *"。

6
为了保险起见,您可以创建初始化为相同值的char数组,例如:
char dgeqrf[] = "DGEQRF";
char space[] = " ";

或者您可以查看该函数的源代码;如果它实际上不修改这些数组的内容,您可以将参数更改为const char *


谢谢。这看起来是前进的方向。 - K17
成功创建字符串,已经移除了错误。 - K17

1
抱歉回复晚了,我刚遇到这个问题。你可以尝试这样做:
string dgeqrf = "DGEQRF";

使用"const char *"的一个问题是这样的代码:

string formatString;
switch (format)
{
    case FORMAT_RGB:  formatString = "RGB"; break;
    case FORMAT_RGBA: formatString = "RGBA"; break;
    case FORMAT_TP10: formatString = "TP10"; break;
    default:          formatString = "Unsupported"; break;
}

如果你将formatString声明为“const char *”,这是行不通的。

关于“如果您将formatString声明为const char *,则无法正常工作”的问题-此处显示的代码与const char *一起可以正常工作,但潜在的问题是该函数需要char *而不是const char *,因此我们不知道它是否会修改字符串的内容,并且不允许修改字符串文字。因此,需要具有可修改的数组,可以通过从string进行转换或作为char数组而不是指针(如我的答案)来实现。_除非_您需要动态分配内容(例如在此答案中),否则数组更简单。 - Arkku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接