c++ - sizeof 继续返回 4 而不是实际大小

标签 c++ sizeof

#include <iostream>

using namespace std;

int main()
{
    cout << "Do you need to encrypt or decrypt?" << endl;
    string message;
    getline(cin, message);

    int letter2number;

    for (int place = 1; place < sizeof(message); place++)
    {
        letter2number = static_cast<int>(message[place]);
        cout << letter2number << endl;
    }
}

问题示例:我输入了 15 个字母,但只打印了 4 个整数。我输入了七个字母,但只打印了四个整数。

循环在我的电脑上只出现了四次,而不是字符串中的字符数。

这是我遇到的唯一问题,所以如果您看到其他错误,请不要告诉我。 (这样更有趣。)

感谢您的宝贵时间。

最佳答案

sizeof 返回表达式的大小。对于您来说,这是一个 std::string,对于您的 std::string 实现,这是四个。 (可能是内部缓冲区的指针。)

但是你看,那个缓冲区只被字符串指向,它对 std::string 本身的大小没有影响。为此,您需要 message.size(),它会为您提供该缓冲区指针指向的字符串的大小。

随着 string 的内容发生变化,缓冲区指针指向的内容也会发生变化,但指针本身的大小始终相同。


考虑以下几点:

struct foo
{
    int bar;
};

此时,sizeof(foo) 已知;它是一个编译时常量。它是 int 的大小以及任何额外的 padding编译器可能会添加。

你可以让bar取任何你想要的值,并且大小保持不变,因为bar的值是什么与类型和大小无关bar 本身。

关于c++ - sizeof 继续返回 4 而不是实际大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2570329/

相关文章:

C++程序不打印出字符串但输出 double 值

c++ - 将 UINT32 值转换为 UINT8 数组[4]

c++ - Qt C++ 如何将加密文本的 QByteArray 保存到文件中,然后读取并格式化为 QByteArray

c - 使用指针知道数组的大小

c++ - Char Star Array 参数未正确终止

C++/CX 如何将 IRandomAccessStream^ 转换为字节并返回。 (UWP)

c# - 设置事件 Chrome 窗口 (C++)

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

C程序忽略包含sizeof的if语句

C - SizeOf 指针