我需要 toString() 的 c 字符串格式,但如何转换它?这是函数:
string toString(){
string tmp;
char buf[80];
if (*d != 1)
sprintf_s(buf, "%d/%d", *n, *d);
else sprintf_s(buf, "%d", *n);
tmp = string(buf);
return tmp;
}
需要 toString() 的 C 字符串格式
如果你只需要转换toString()的输出,你可以使用
const char* s = toString().c_str();
请注意,
c_str
只是返回一个指向字符串底层字符存储的指针。因此,您确实需要小心,不要获取指向字符串的指针,然后让该字符串超出范围,在这种情况下,指针可能仍指向有效内存,也可能不指向有效内存。您的函数当前返回一个 string
(我猜您的代码有 using namespace std
),这意味着 C++ 字符串对象。
如果您不是绝对需要 C 字符串,我建议使用 C++ 字符串,因为它们更新并且更容易使用。但是,如果由于代码中其他地方的原因,您确实需要 C 字符串,那么您的函数应该如下所示
char* toString() {
// formatting your output
}
因为所有 C 字符串都是
'\0'
的空终止 (char
) 数组,而数组相当于指向第一个元素的指针,所以这就是 char*
的来源。
因此,某些东西需要“拥有”该字符数组的内存,并且某些东西需要有一个“生命周期”,该“生命周期”至少与您需要它的范围一样长。如果你创建一个返回原始
char *
的函数,你应该确保指针指向 a:
new
运算符动态分配的字符串,然后确保稍后使用 delete
。无论哪种情况,C++ 字符串流都可以使输出格式更加直观。您将需要
#include <sstream>
,然后一些谷歌搜索将引导您走向正确的方向。如果您需要 C 字符串,此解决方案也适用,因为 C++ 字符串有一个名为 c_str()
的方法,可将 C++ 字符串转换为 C 字符串(以空字符结尾的字符数组):#include <string>
#include <sstream>
using namespace std;
string toString() {
stringstream ss; // these are so useful!
if (*d != 1) {
// this probably isn't the exact formatting you are looking for,
// but stringstreams can certainly do it if you research a bit!
ss << *n << *d;
}
else {
ss << *n;
}
return ss.str();
}
void function_that_needs_c_string(const char * c);
int main() {
function_that_needs_c_string(toString().c_str());
}