为什么在 C++ 中,当我用 '+' 连接一个字符串时,它不会连接,而是删除字符串的第一个字符
Why in C++ when i concat a string with '+' like it don't concat but remove first char of the string
我在 java 6-7 年后学习 C++,我遇到了一个问题,在这个片段中,不是 "concat" 它只是删除了输入的 n 字符..
#include <iostream>
int main()
{
int id;
std::cin >> id;
std::cout << "Hello world!" + id << std::endl;
return 0;
}
输出不是
Hello world!*input*
而是减去 "hello world" 输入中给出的 n 个字符。如果我给 8,输出将是 rld!。
如果有人能解释这个……我会很高兴听到! =)
这就是指针算法在 C/C++ 中的工作方式。
基本上,"Hello world!"
只是一个 const char*
,它的 +
运算符就像一个指针一样作用于它。这意味着,例如,如果您向其中添加 3
,那么它不会指向 "Hello world"
的开头,而是指向开头后的 3 个字符。如果你打印它,你会得到 llo world
.
所以你没有在那里进行字符串连接。
如果您只想打印这些东西,您可以使用 operator <<
并改为执行以下操作:
std::cout << "Hello world!" << id << std::endl;
如果您需要一个真正像字符串一样工作的字符串,请考虑使用标准库中的 std::string
,或者如果您使用 Qt 之类的东西,您可以使用 QString
.
使用现代编译器(支持 C++11),您可以使用 std::to_string
从 int
创建一个字符串,然后您可以这样做:
std::string s = "Hello world!";
int i;
std::cin >> i;
s += std::to_string(i);
std::cout << s;
如果您考虑认真进行 C++ 应用程序开发,请考虑使用 Qt 或 boost 等库,这会让您的工作变得更加轻松,尽管熟悉标准库也是一件好事。 :)
"Hello world!" 在 C(C++ 的基础)中属于 const char[] 类型,当您尝试使用指针算术时,它会被视为 const char*。换句话说,它是一个内存地址,指向(比如)位置 OxDEAD0000,其中包含字符 "Hello world!" 和空终止符。
"Hello world!" + id
因此解析(如果 id 为 8)为 0xDEAD0008
流运算符然后对该地址的内容进行操作,该地址是 "Hello world!" 中 8 个字符的偏移量 - 即 "rld!".
您可以使用 operator<<
std::cout << "Hello world!" << id << std::endl;
或者,如果您可以访问 C++11,则可以使用 std::to_string
std::cout << "Hello world!" + std::to_string(id) << std::endl;
我在 java 6-7 年后学习 C++,我遇到了一个问题,在这个片段中,不是 "concat" 它只是删除了输入的 n 字符..
#include <iostream>
int main()
{
int id;
std::cin >> id;
std::cout << "Hello world!" + id << std::endl;
return 0;
}
输出不是
Hello world!*input*
而是减去 "hello world" 输入中给出的 n 个字符。如果我给 8,输出将是 rld!。 如果有人能解释这个……我会很高兴听到! =)
这就是指针算法在 C/C++ 中的工作方式。
基本上,"Hello world!"
只是一个 const char*
,它的 +
运算符就像一个指针一样作用于它。这意味着,例如,如果您向其中添加 3
,那么它不会指向 "Hello world"
的开头,而是指向开头后的 3 个字符。如果你打印它,你会得到 llo world
.
所以你没有在那里进行字符串连接。
如果您只想打印这些东西,您可以使用 operator <<
并改为执行以下操作:
std::cout << "Hello world!" << id << std::endl;
如果您需要一个真正像字符串一样工作的字符串,请考虑使用标准库中的 std::string
,或者如果您使用 Qt 之类的东西,您可以使用 QString
.
使用现代编译器(支持 C++11),您可以使用 std::to_string
从 int
创建一个字符串,然后您可以这样做:
std::string s = "Hello world!";
int i;
std::cin >> i;
s += std::to_string(i);
std::cout << s;
如果您考虑认真进行 C++ 应用程序开发,请考虑使用 Qt 或 boost 等库,这会让您的工作变得更加轻松,尽管熟悉标准库也是一件好事。 :)
"Hello world!" 在 C(C++ 的基础)中属于 const char[] 类型,当您尝试使用指针算术时,它会被视为 const char*。换句话说,它是一个内存地址,指向(比如)位置 OxDEAD0000,其中包含字符 "Hello world!" 和空终止符。
"Hello world!" + id
因此解析(如果 id 为 8)为 0xDEAD0008
流运算符然后对该地址的内容进行操作,该地址是 "Hello world!" 中 8 个字符的偏移量 - 即 "rld!".
您可以使用 operator<<
std::cout << "Hello world!" << id << std::endl;
或者,如果您可以访问 C++11,则可以使用 std::to_string
std::cout << "Hello world!" + std::to_string(id) << std::endl;