在我的例子中,const char*到char*
const char * to char * in my case
虽然我知道在C/C++中,由于许多问题,将const char *
转换为char *
几乎是被禁止的,但我遇到了一种情况,我认为我必须将const char *
转换为char *
。
我使用c_str
从文本文件中获得一个字符串作为字符串,我想修改这个字符串。但是问题是c_str
将字符串转换为const char *
。那么,在这种情况下使用strdup
是一个好选择吗?或者有更好的想法吗?
实际上,您可以直接修改std::string对象,如下面的小程序所示:
int main()
{
std::string s("Hello World");
for(char& c : s)
{
c = toupper(c);
}
s[0] = 'h';
s[6] = 'w';
s.resize(12);
s[11] = '!';
std::cout << s;
return 0;
}
我认为,这是自我解释。虽然您提到大小不会改变,但我也为这种情况添加了一个示例,请参见调整大小。还有其他方法可以操作字符串,例如insert。看看std::string文档。
为什么使用&s[0]比c_str好?
std::basic_string类有data()
和c_str()
。但是,正如您所知,这些函数的结果类型是const CharType*
(CharType:char
、wchar_t
、char16_t
、char32_t
)。
有两种方法可以获得CharType*
。
- 使用CCD_ 17。然而,这是一个非常肮脏和破碎的系统
-
使用CCD_ 18。
operator[]
不破坏类型系统#include <string> #include <type_traits> int main(){ std::string s1 = "Hello world"; static_assert(std::is_same<char&, decltype(s1[0])>::value, "err"); static_assert(std::is_same<char*, decltype(&s1[0])>::value, "err"); const std::string s2 = "Hello world"; static_assert(std::is_same<const char&, decltype(s2[0])>::value, "err"); static_assert(std::is_same<const char*, decltype(&s2[0])>::value, "err"); }
相关文章:
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*