這個問題在這里已經有了答案: printf 與 std::string? (8 個回答) 昨天關門。
為什么 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
uj5u.com熱心網友回復:
std::printf
是 C 標準庫中的一個函式。它不知道std::string
類。您需要提供一個 C 字串 ( const char*
) 到%s
. 您可以通過呼叫該std::string::c_str()
方法來做到這一點。
printf("Name: %s Old: %u\n", person[i].GetName().c_str(), person[i].GetOld());
uj5u.com熱心網友回復:
使用printf()
with"%s"
需要 a (const) char*
(或衰減成 a 的東西(const) char*
,比如(const) char[]
)。
std::string
有一個c_str()
方法可以回傳一個char const*
你可以傳遞給printf()
.
因此,您的printf()
行應該是:
printf("Name: %s Old: %hu\n", person[i].GetName().c_str(), person[i].GetOld());
注意:我也改為%u
-%hu
請參閱@RemyLebeau 的評論。
或者,您可以使用 C 的std::cout
流按std::string
原樣列印:
#include <iostream>
std::cout << "Name: " << person[i].GetName() << " Old: " << person[i].GetOld() << std::endl;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481505.html
上一篇:如何將地址轉換回VBA中的范圍?