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