2014-02-21 51 views
0

所以這是我的代碼如何在字符串中使用printf?

string name; 
cout <<"\n Enter Your name : \n"; 
cin >> name; 
printf("%s" , name); 

和一些奇怪的原因,在這個

爲什麼代碼塊崩潰?

我該如何解決?

感謝

+2

請勿混用'和'printf'的std :: cout'。兩者都被緩衝,但使用*不同的緩衝區,這可能會使您的輸出出現意外。 –

+0

只要你沒有調用'ios :: sync_with_stdio(false)',混合C++風格和C風格的I/O就完全定義好了。雖然這可能是不好的風格。 – Brian

回答

3

你應該和所有的警告(例如g++ -Wall)編譯。你會得到一個有用的警告。你想用c_str這樣

printf("%s", name.c_str()); 

BTW,爲什麼要用printf,爲什麼你忘記\nprintf格式字符串的結束? (或使用fflush

更好的代碼:輸入

cout << name << endl; 
+0

謝謝!我正在測試printf,這只是代碼的一小部分 我想製作一個基於文本的RPG,我覺得如果沒有所有在cout中使用的「<<」,printf將佔用更少的空間 – Andrew

2

如果需要std::string傳遞給接受/函數使用C風格的字符串(const char *),使用.c_str()。它返回一個const char *

這就是你需要使用現有的庫,系統調用等時應該做的事情。對於你自己的代碼,找到更多的C++方法通常會更好。

在這種情況下:

std::cout << name << std::endl;