【发布时间】:2012-03-02 12:14:56
【问题描述】:
我正在尝试将中间可能包含空字符的字符串复制到 char 数组。 我构造了以下函数。
void SaveStringToChar(string &mystring,const char * &ArrChar)
{//begin function
std::string str;
char * writable = new char[str.size() + 1];
std::copy(str.begin(), str.end(), writable);
writable[str.size()] = '\0';
ArrChar = writable;
}//end function
我的问题是这种方法保证我不会丢失空元素后的字符。 我的另一个问题是我收到了这个链接器错误,我不知道它是什么意思。
/tmp/ccUpCRaz.o:在函数“Parser::RuleParser(char const*)”中: Parser.cpp:(.text+0x3f6): 未定义对 Parser::SaveStringToChar(std::basic_string, std::allocator >&, char const*&)' 的引用 collect2: ld 返回 1 个退出状态
请告诉我。
这是我传递东西比较的函数。
void Search( size_t TextLength, const char *Text, const vector<const char *> &patterns );
【问题讨论】:
-
出于好奇,你为什么不用
std::string::c_str()? -
我碰巧使用了它们,但我的字符串中间可能包含 null ,我怀疑它们在我将它们推送到 const char * 类型的向量时丢失了,因为我在之后重新检查了向量中的数据我发现他们迷路了
-
我不确定 c_str() 函数的结果是否保证包含第一个
\0之后的所有字符。即使您使用一种编译器对其进行测试,它在另一种编译器上的行为方式也可能不同。 -
我怀疑他们真的迷路了。但是,由于
c_str()返回一个以空字符结尾的字符串,因此在显示它时您确实无法判断是否真的到达了字符串的末尾。现在一个重要的问题是:如果您确定它们可以包含空字符,为什么还要处理以空字符结尾的字符串?坚持使用std::string似乎风险要小得多。 -
@MrLister:我现在没有标准的副本可供使用,但我相当有信心保证
c_str()返回字符串的所有字符,在结果数组中是否为 null。有人可以确认/确认吗?
标签: c++ string char type-conversion