【问题标题】:Why do I only display one character when I store a string in a char?为什么我在 char 中存储字符串时只显示一个字符?
【发布时间】:2018-07-15 17:24:09
【问题描述】:

[我正在制作一个随机词生成器,所以我使用 time.h 库来使用 srand 并生成一个随机数...如果随机数 = 0,则 char (principal)= 'hola'。 但在 CMD 中只显示最后一个字符:((对不起我的英语不好)

代码是:

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    int principal;
    char principal1;

    srand(time(NULL));

    principal = rand() % 2;

    if (principal == 0)
    {
        principal1 = 'hola';
        cout << principal1 << endl;
    }
    system("pause");
    return 0;
}

【问题讨论】:

  • 一个字符是一个字符。一个字符。不是字符串。
  • std::string principal1;principal1="hola"; 别忘了把 #include &lt;string&gt; 放在那里。
  • 您应该已经收到关于'hola' 的编译器警告,如果没有,请提高编译器警告级别。

标签: c++


【解决方案1】:

在 C 和 C++ 中,单引号 (') 表示“字符”(或一个字母/数字/符号)。两个单引号之间只能有一个字符。示例:

'c'
'9'
'?'
'\n'  // Newline character
'\0'  // Null character

双引号 (") 表示“字符串”。字符串文字(您在引号之间的代码中键入的字符串)将被视为一个字符数组,最后添加了一个空字符。这种类型的字符数组被称为“c 字符串”(不要与 Microsoft 的“CString”混淆。

"Hi"  // Same as {'H', 'i', '\0'}
"Hello !\n"  // Same as {'H', 'e', 'l', 'l', 'o', ' ', '!', '\n', '\0'}

试图将字符串放在单引号内通常是不好的。它让您进入一些weird territory 的实现(即编译器)特定行为。

如果你想处理字符串“hola”,那么你应该使用std::string 对象来存储它。 (您可以使用char*,但我建议您使用std::string,直到您更好地理解差异。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2017-09-15
    • 2021-05-26
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多