如何转换? toString() 的 C 字符串格式 [关闭]

问题描述 投票:0回答:1

我需要 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;
}
c++ c-strings
1个回答
1
投票

需要 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());
}

© www.soinside.com 2019 - 2024. All rights reserved.