char start = 'a';
string out=""+start;
cout<<out.length()<<endl; 

首先我们在 start 变量中取一个字符,然后我们取 make string 并用 start 变量初始化并打印它?

#1楼 票数:7

string out = "" + start;

这个添加不会做你认为你做的事情, 'a'根据它的 ASCI 值被转换为int ,你将指针移动了那么多元素,然后你从const char*构造字符串const char*您正在传递,这会导致 UB,因为它指向您尝试读取的某些无效内存位置。

#2楼 票数:4

""是一个const char[1] (持有'\\0' )。

您正在尝试向其添加'a' - 因此它会衰减为一个指针,其地址比增加97 ( (int)'a' == 97 )。 现在您将std::string分配给这个越界地址 - 这是未定义的行为。


为了实现您想要的,您可以使用operator""sconst char[1]转换为std::string 然后std::string::operator+将执行并正确连接所有内容。

using namespace std::string_literals;

char start = 'a';
std::string out = ""s + start;
std::cout << "string: " << out << " - length: " << out.length() << std::endl;

输出:

字符串:a - 长度:1

#3楼 票数:1

将字符转换为字符串,它的工作原理 ->

char start = 'a';
std::string s(1, start);
std::cout << s.length() << endl;

  ask by Zhatab saifi translate from so

未解决问题?本站智能推荐:

2回复

在屏幕上打印出字符串后,在c++中更改字符串

在将其打印到屏幕上之后,我想更改一个字符串。 注意:我不是要替换包含字符串定义的变量,而是要替换屏幕上的输出。
3回复

C++:打印出字符串后设置填充

我试图cout一个字符串,以便输出的总长度为15。 例如,如果字符串是“ Tom”,那么我想在cout之后cout 12个空格。 我知道如何使用setfill和setw来拥有前导空格,但是之后是否有内置的空格填充方式? 或执行此操作的唯一方法是获取字符串长度,并在字符串末尾添加一堆空格?
1回复

为什么if语句没有打印出字符串?cp

我想在字符串中打印偶数和奇数,而不是在二进制中打印真假 | 1 / 0; 为什么输出仍然打印布尔值? 输出:
1回复

cout错误地打印出字符串向量

下面的代码段将打印单词的第一个字母,而不是整个单词。 但是,当我调试它时,我看到包含整个单词的数据数组。 谁能解释为什么。
1回复

在字符串中打印出C++整数位?

所以我正在处理的代码(对于学校)假设用户给定整数并以字符串形式打印出来(例如输入:154 |输出:一个五四)。 目前我几乎已经弄明白了,除了它倒退了! 需要弄清楚如何以正确的方式打印(我的打印出四五一)。
1回复

为什么我不能打印出我的字符串数组c++?

我已经编写了这段代码,应该读取一个txt文件并将该txt文件中的每一行都读取到字符串数组bookTitle [ARRAY_SIZE]中,另一行读取到bookAuthor [ARRAY_SIZE]。 这是我的代码: 所以我有loadData函数,我很确定这是我的问题。 当我在运行loadD
1回复

我用一个字符串制作了一个C++构造函数,但是它不会打印出字符串

接下来,我做了一个名为TheSecondVeryBestClassEverMade的类(我已经做过以前有史以来最好的类,所以这就是为什么!)做了一个构造函数,并在参数中做了一个字符串z。 在此构造函数的主体中,我介绍了另一个函数(在C ++中是一个函数,在Java中是方法?),并将字符串名称设
3回复

从2D字符串数组中打印出字符串

因此,我的数组如下所示: 如果我尝试打印,请像这样说“ WOL-LA-CHEE”: cout <<链接[0] [1] 我的输出看起来像这样: Ë 我究竟做错了什么?