【问题标题】:Using c.str to convert from string to cstring使用 c.str 将字符串转换为 cstring
【发布时间】:2016-01-28 02:32:14
【问题描述】:

我正在练习一些 cstring 和 string 的工作。 使用 c_str() 从字符串到 cstring 我得到一个不兼容的数据类型编译错误。 例如,这是给出上述错误的代码:

string str = "StackOverFlow";
char inCstring[20]{};
inCstring = str.c_str();

有什么想法吗?

【问题讨论】:

  • 尝试使用char* inCstring; 而不是char inCstring[20]{};
  • 你知道 c_str 是做什么的吗?
  • 如果您找到了解决方案,您应该将其作为答案发布,而不是在问题中。
  • 您不能在 C 或 C++ 中分配给数组。

标签: c++ string c-strings


【解决方案1】:

问题是 str.c_str() 返回一个 const char*,而您正试图将它传递给一个 char*。使用 strcpy 获得预期结果:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

int main()
{
    string str = "StackOverFlow";
    char inCstring[20];

    strcpy(inCstring, str.c_str());

    cout << "str: " << str << endl;
    cout << "inCstring: " << inCstring << endl;

    return 0;
}

【讨论】:

  • 刚刚注意到 OP 想出了与“方法 B”相同的答案。我认为“编程风格”没有任何问题,只是它不是“左值=”赋值。缺少方法 A,因为新的 cstring 是 const。
  • 问题是他试图分配给一个数组(char [] 类型),而不是char *
  • @M.M 这是真的。但需要注意的是,在示例代码中,直接将char inCstring[20]; 交换为char* inCstring; 会导致分段错误。
  • 并尝试使用char* inCstring; inCstring = str.c_str(); 行会导致编译器产生无效的转换错误。
【解决方案2】:

所以我想出了两种方法来实现这一点。
首先,重要的是要记住您不能分配给整个数组,这意味着必须指定要分配的数组元素。由于这个原因,试图将字符串分配给 char 数组根本行不通。
话虽如此,通过指定元素,可以在 char 数组的特定元素中分配一个字符。
下面是完成字符串到cstring(字符串到字符数组)“转换”的两种方法。有关完整代码,请参阅文森特的回答。我发现方法 B 更好,因为我想在我的字符数组上设置最大大小。

方法A:

string str = "StackOverFlow";
const char* inCstring;
inCstring = str.c_str();

方法B:

string str = "StackOverFlow";
char inCstring[20]{};

然后使用 strcpy

strcpy(inCstring, str.c_str());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2021-05-07
    • 2014-08-16
    • 2012-06-29
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多