为什么printf输出的是字符而不是数据?
Why does printf output characters instead of data?
为什么printf输出的是字符而不是数据?
看代码可以比较明白我要做什么,但是不清楚为什么输出是这样
#include <vector>
#include <string>
#include <cstdio>
class Person
{
public:
Person(const std::string& name, uint16_t old)
: m_Name(name)
, m_Old(old)
{
}
public:
std::string GetName() const { return m_Name; }
uint16_t GetOld() const { return m_Old; }
private:
std::string m_Name;
uint16_t m_Old;
};
int main()
{
std::vector<Person> person = { Person("Kyle", 26), Person("Max", 20), Person("Josiah", 31) };
for (uint16_t i = 0; i < person.size(); ++i)
{
printf("Name: %s Old: %u\n", person[i].GetName(), person[i].GetOld());
}
return 0;
}
> // output
> Name: Ь·╣ Old: 1701607755
> Name: Ь·╣ Old: 7889229
> Name: Ь·╣ Old: 1769172810
std::printf
是 C 标准库中的一个函数。它不知道 std::string
class。您需要向 %s
提供一个 C 字符串 (const char*
)。您可以通过调用 std::string::c_str()
方法来做到这一点。
printf("Name: %s Old: %u\n", person[i].GetName().c_str(), person[i].GetOld());
将 printf()
与 "%s"
一起使用需要 (const) char*
(或衰减为 (const) char*
的东西,例如 (const) char[]
)。
std::string
has a c_str()
方法,其中 returns 您可以传递给 printf()
的 char const*
。
因此,您的 printf()
行应该是:
printf("Name: %s Old: %hu\n", person[i].GetName().c_str(), person[i].GetOld());
注意:我还将 %u
更改为 %hu
- 请参阅 。
或者,您可以使用 C++ 的 std::cout
流打印 std::string
as-is:
#include <iostream>
std::cout << "Name: " << person[i].GetName() << " Old: " << person[i].GetOld() << std::endl;
为什么printf输出的是字符而不是数据? 看代码可以比较明白我要做什么,但是不清楚为什么输出是这样
#include <vector>
#include <string>
#include <cstdio>
class Person
{
public:
Person(const std::string& name, uint16_t old)
: m_Name(name)
, m_Old(old)
{
}
public:
std::string GetName() const { return m_Name; }
uint16_t GetOld() const { return m_Old; }
private:
std::string m_Name;
uint16_t m_Old;
};
int main()
{
std::vector<Person> person = { Person("Kyle", 26), Person("Max", 20), Person("Josiah", 31) };
for (uint16_t i = 0; i < person.size(); ++i)
{
printf("Name: %s Old: %u\n", person[i].GetName(), person[i].GetOld());
}
return 0;
}
> // output
> Name: Ь·╣ Old: 1701607755
> Name: Ь·╣ Old: 7889229
> Name: Ь·╣ Old: 1769172810
std::printf
是 C 标准库中的一个函数。它不知道 std::string
class。您需要向 %s
提供一个 C 字符串 (const char*
)。您可以通过调用 std::string::c_str()
方法来做到这一点。
printf("Name: %s Old: %u\n", person[i].GetName().c_str(), person[i].GetOld());
将 printf()
与 "%s"
一起使用需要 (const) char*
(或衰减为 (const) char*
的东西,例如 (const) char[]
)。
std::string
has a c_str()
方法,其中 returns 您可以传递给 printf()
的 char const*
。
因此,您的 printf()
行应该是:
printf("Name: %s Old: %hu\n", person[i].GetName().c_str(), person[i].GetOld());
注意:我还将 %u
更改为 %hu
- 请参阅
或者,您可以使用 C++ 的 std::cout
流打印 std::string
as-is:
#include <iostream>
std::cout << "Name: " << person[i].GetName() << " Old: " << person[i].GetOld() << std::endl;