【问题标题】:C++: initialize char array with a string?C++:用字符串初始化 char 数组?
【发布时间】:2012-12-04 01:09:40
【问题描述】:

假设我有一个叫做垃圾的字符串。

无论垃圾中有什么,我都想用它制作一个 char 数组。每个元素都是字符串的一个字符。

所以,代码类似于:

const int arrSize = sizeof(garbage); //garbage is a string
char arr[arrSize] = {garbage};

但是,这将给出一个错误“无法在初始化中将字符串转换为字符”。

这样做的正确方法是什么?我只想给这该死的东西一个字符串,然后用它做一个数组。

【问题讨论】:

  • 假设字符串,你的意思是std::stringsizeof(garbage) 可能不会像你想象的那样做。它只是为您提供std::string 对象的大小,这是一个与字符串长度无关的编译时间常数,它是一个运行时值。
  • 你是对的,本。 sizeof(garbage) 没有给我想要的东西。接得好! garbage.size() 是正确的方法。
  • 是的,但是arrSize 不能用于指定arr 的大小,因为它不再是编译时间常数。

标签: c++ arrays string


【解决方案1】:

C++ std::string 维护一个内部 char 数组。您可以使用c_str() 成员函数访问它。

#include <string>
std::string myStr = "Strings! Strings everywhere!";
const char* myCharArr = myStr.c_str();

请记住,您不能修改内部数组。如果您想这样做,请复制数组并修改副本。

【讨论】:

  • 为什么需要将 std::string 转换为 char* 超出了我的理解,但这个问题的一个很好的答案。
  • 正是我想要的。为了回答上面的问题,我正在实现一个字符串随机化器。我想我可以随机化以获取字符串大小范围内的数字,然后从字符串中提取一个字符。如果我将整个字母数字设置为字符串,可能有利于密码生成。
  • 你可以在不获取数组的情况下做你想做的事 - myStr.size() 将返回字符串的长度,你可以使用myStr[i] 访问索引i 处的字符串中的任何字符。
【解决方案2】:

我认为你所追求的要简单得多:

char arr[] = "some interesting data (garbage)";

【讨论】:

  • 谢谢,这回答了我来这个问题的原因。我正在尝试将一段 C 代码转换为 C++。在 C 代码中,它声明了一个 'char * foo = "string literal" ',而 foo 在后面的函数中应该是一个 char *,而不是 const char *。
【解决方案3】:

您可以只使用garbage.data(),它已经是指向包含您的字符串数据的字符数组的第一个元素的指针。

【讨论】:

  • 我认为初始化不会起作用,因为 arr 不是 const。
  • @LuchianGrigore:不,当然,但我什至不会初始化任何东西。直接使用数据即可。如果需要副本,请复制字符串。
【解决方案4】:

或者这是一个很重的方法。

#include <string>
std::string temp = "something";
char* myChar = new char(temp.length());
for(int i = 0; i < temp.length(); ++i){
    a[i] = temp[i];
}

【讨论】:

  • 温馨提示:使用完毕记得删除“a”。
猜你喜欢
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2022-01-16
相关资源
最近更新 更多