Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中的graphics.h上打印包含字符串的集合+;_C++_String_Graphics - Fatal编程技术网

C++ 在c+中的graphics.h上打印包含字符串的集合+;

C++ 在c+中的graphics.h上打印包含字符串的集合+;,c++,string,graphics,C++,String,Graphics,我试图使用outtext()函数在graphics.h console上打印包含字符串的集合的元素,但出现以下错误: 无法将参数“1”的“std::string{aka std::basic_string}”转换为“char*”,将其转换为“void outtext(char*)”| 这是一段给出错误的代码: for(i=0;i<20;i++){ for(j=0;j<20;j++){ outtext(str[i][j]); } } 我使用c_s

我试图使用outtext()函数在graphics.h console上打印包含字符串的集合的元素,但出现以下错误:

无法将参数“1”的“std::string{aka std::basic_string}”转换为“char*”,将其转换为“void outtext(char*)”|

这是一段给出错误的代码:

for(i=0;i<20;i++){

    for(j=0;j<20;j++){

        outtext(str[i][j]);
    }

}
我使用c_str()时如下所示:

void outtext(char *textstring);
for(i=0;i<20;i++){

    for(j=0;j<20;j++){

        outtext(str[i][j].c_str());
    }

}

for(i=0;i如果可以更改输出函数的原型,那么最好将
void outtext(char*textstring);
更改为void
outtext(const char*textstring);
因为输出函数不需要修改字符串。否则可以在传递到函数之前使用
const\u cast
,如
outtext(const\u cast(str[i][j].c\u str())<或代码>或将字符串复制到代码< char */COD>并传递复制值。

< P>我想问一下这个问题是关于30年前BGI图形库和Borland C++的。问题的根源是这个库写得很差,因为它没有实现const正确性。 <> PurthC++编译器没有遵循任何C++标准的任何东西,所以你的运气不好。如果你有一个合适的C++编译器,你可以使用代码> COSTOSTCAST < /COD>,但是我非常怀疑这是对你有用的。

剩下的唯一解决方案是肮脏、糟糕的方式:

outtext((char*)str[i][j].c_str()); // bad practice

<>你不应该扔掉<代码> const <代码>,在C和C++中都没有。

也可以试试这个:

char *cstr = new char[21]; // just in case string length is maxed at 20, leave 1 character for '\0'

for (int i = 0; i<20; i++) {
    for (int j = 0; j<20; j++) {
        strcpy_s(cstr, str[i][j].length() + 1, str[i][j].c_str());

        outtext(cstr);
    }
}

delete[] cstr;
char*cstr=new char[21];//万一字符串长度最大为20,请为“\0”保留1个字符

对于(int i=0;I.<代码>图形> h <代码>这不是C++标准的标题。代码中的<代码> STR <代码>是什么类型?是字符串STR [20 ] [20 ];ok,CyString()返回一个<代码> const char */COD>()。因此,将原型更改为<代码>无效文本(conchchar *文本字符串);< /Cord>(您不能对文本字符串进行任何更改)。或者你应该先将它复制到另一个char*变量,然后再通过函数.graphics.h是一个旧的DOS图形头,它为Borland的旧BGI图形库提供了一个API,早在80/90年代。在过去20年左右的时间里,印度以外没有人使用过它。我不知道哪一个更悲伤;你知道看到的BGI库是什么我已经老了。事实上我在很多场合都用过这个东西。@WhozCraig实际上,学校在90年代末仍然使用DOS进行教学。不知什么原因,它在印度的坏学校仍然很流行,他们认为喝茶是一个非常好的主意CH学生在2016年初的标准C++。我的第一个(唯一值得感谢的)BGI编程的曝光是我在使用Turbo C 2(这是一个恒星编译器,集成调试器和IDE等)时所咨询的几个项目。它的直接继承者,Turbo C++现在仍然在一个有CLAN和GCC免费应用的世界里使用,只是我自己。@ USS620797让我们不要超过我们自己。它是有效的。它不是完美的(这个答案放大了为什么,值得你选择和投票)。