gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:00 25 4
gpt4 key购买 nike

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com