এটি printfনিরাপদ প্রকার নয় বলে এটি সংকলন করছে , কারণ এটি সি অর্থে 1 এ পরিবর্তনশীল যুক্তি ব্যবহার করে । printfএর জন্য কোনও বিকল্প নেই std::string, কেবল একটি সি-স্টাইলের স্ট্রিং। যা প্রত্যাশা করে তার স্থানে অন্য কিছু ব্যবহার করা আপনার পছন্দসই ফলাফল দেয় না। এটি আসলে অপরিবর্তিত আচরণ, তাই কিছুতেই ঘটতে পারে।
সবচেয়ে সহজ উপায় এই সমাধানের জন্য, যেহেতু আপনি সি ব্যবহার করছেন ++ সাধারণত মুদ্রণ সঙ্গে std::cout, যেহেতু std::stringসমর্থন করে মাধ্যমে অপারেটর ওভারলোডিং:
std::cout << "Follow this command: " << myString;
যদি কোনও কারণে আপনাকে সি-স্টাইলের স্ট্রিংটি বের করতে হয় তবে আপনি নাল-টার্মিনেটেড পাওয়ার c_str()পদ্ধতিটি ব্যবহার করতে পারেন । আপনার উদাহরণ ব্যবহার করে:std::stringconst char *
#include <iostream>
#include <string>
#include <stdio.h>
int main()
{
using namespace std;
string myString = "Press ENTER to quit program!";
cout << "Come up and C++ me some time." << endl;
printf("Follow this command: %s", myString.c_str()); //note the use of c_str
cin.get();
return 0;
}
আপনি যদি এমন কোনও ফাংশন চান যা পছন্দ করে printfতবে নিরাপদ টাইপ করে থাকে তবে ভেরিয়েডিক টেম্পলেটগুলি দেখুন (সি ++ 11, এমএসভিসি 12 হিসাবে সমস্ত বড় সংকলকগুলিতে সমর্থিত)। আপনি এখানে একটি উদাহরণ খুঁজে পেতে পারেন । স্ট্যান্ডার্ড লাইব্রেরিতে এর মতো বাস্তবায়িত হওয়ার মতো কিছুই আমার জানা নেই, তবে বিশেষভাবে বুস্টে থাকতে পারে boost::format।
[1]: এর অর্থ হল যে আপনি যে কোনও সংখ্যক আর্গুমেন্ট পাস করতে পারেন, তবে ফাংশনটি আপনাকে এই আর্গুমেন্টগুলির সংখ্যা এবং প্রকারগুলি বলতে এটির উপর নির্ভর করে। ক্ষেত্রে printf, তার মানে এভাবে এনকোড টাইপ তথ্য সমেত একটি স্ট্রিং %dঅর্থ int। আপনি যদি প্রকার বা সংখ্যাটি সম্পর্কে মিথ্যা বলেন তবে ফাংশনটি জানার কোনও মানক উপায় নেই যদিও কিছু সংকলক আপনার মিথ্যা বলার সময় পরীক্ষা করার এবং সতর্কতা দেওয়ার ক্ষমতা রাখে।