這個問題在這里已經有了答案: 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中的范圍?
