所以我有一个包含"RGGB"
的字符串,我需要它在char
数组中才能执行某些操作。然后我需要替换空格的某些字符,例如第一个'G'
,以便我的char
数组保持"R GB"
。
我该怎么做?到目前为止,我尝试了这个解决方案:
int main()
{
string problem="RGGB";
const char *p=problem.c_str();
p[1]=' ';
return p;
}
我收到错误:
指定只读位置
*(p + ((sizetype)i))
答案 0 :(得分:2)
要访问const char*
的“内部字符串”(我的意思是std::string
),提供了两个成员函数:std::string::c_str
和std::string::data
。在C ++ 11之前,不同之处在于std::string::data
未绑定在const char*
时返回指向以空值终止的std::string::c_str
的指针。现在,它们是等价的。并且两者都返回const char*
,甚至在C ++ 11之前。
您的问题有几种解决方法:
使用std::strdup
或std::str(n)cpy
复制字符串并写入副本。
使用const_cast
。非常激烈,但if it doesn't hurt any rules(仅供参考,它确实如此),有效。
根本不要使用std::string
。使用char*
执行您想要的操作,然后可以选择将其转换为std::string
。
只需使用std::string
。
答案 1 :(得分:0)
P [1] =' &#39 ;;
无效,因为const char *是只读指针。
换句话说,它是一个const指针。
记住:
当const出现在*的左边时,指向的是常量,如果const出现在*的右边,则指针本身是常量。如果const出现在两种尺寸上,则两者都是常数。
此代码可能有效:
char problem[]="RGGB";
char* p = problem;
p[1]=' ';
cout<<problem;
答案 2 :(得分:0)
string,一个C ++类,不通过char *直接提供对其内部的可更改访问。虽然你可以抛弃const,但这很危险,因为编译器可能会使用const作为优化路径。
如果您绝对需要这样做,只需使用char数组,而不是字符串或使用字符串方法更改字符串的内容。
答案 3 :(得分:0)
答案在你的问题中:
我需要它在
中char
数组
然后将放在char
数组中:
char problem[] = "RGGB";
problem[1] = ' ';
问题解决了。
另一方面,如果您想使用实际 C ++来解决问题:
std::string problem = "RGGB";
problem.at(1) = ' ';