如何将字符串转换为char*(不是const char*)
How can I transfer string to char* (not const char*)
我想这样写:
string result;
char* a[100];
a[0]=result;
似乎result.c_str()必须是const char*。有什么办法可以做到吗?
可以取字符串中第一个字符的地址
a[0] = &result[0];
保证在c++ 11中工作。(内部字符串表示必须是连续的,并且像c风格的字符串一样以空结束)
在c++ 03中不存在这些保证,但是所有通用的实现都可以工作。
string result;
char a[100] = {0};
strncpy(a, result.c_str(), sizeof(a) - 1);
有一个名为"copy"的成员函数(方法)来完成此操作。
但是你需要先创建缓冲区
这样的string result;
char* a[100];
a[0] = new char[result.length() + 1];
result.copy(a[0], result.length(), 0);
a[0][result.length()] = ' ';
(参考文献:http://www.cplusplus.com/reference/string/basic_string/copy/)
顺便说一下,我想知道你是指string result;
char a[100];
你可以这样做:
char a[100];
::strncpy(a, result.c_str(), 100);
注意null终止
传统方式:
#include <string.h>
a[0] = strdup(result.c_str()); // allocates memory for a new string and copies it over
[...]
free(a[0]); // don't forget this or you leak memory!
如果你真的,真的不能避免这样做,你不应该放弃所有c++提供的,并下降到使用原始数组和可怕的函数,如strncpy
。
char const *temp = result.c_str();
std::vector<char> a(temp, temp+result.size()+1);
你通常可以把数据留在字符串中——如果你需要一个指向字符串数据的非const指针,你可以使用&result[0]
。
相关文章:
- 在字符串函数中抛出'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*