উত্তর:
আপনি বিন্যাস স্ট্রিংয়ে হার্ড কোডিংয়ের চেয়ে *
প্রস্থের স্পেসিফায়ার / স্পষ্টতাটি পাস করতে একটি অ্যাসিরিস্ক ( ) ব্যবহার করতে পারেনprintf()
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
str_len
আর্গুমেন্টের টাইপ থাকতে হবে int
(বা সংকীর্ণ ইন্টিগ্রাল টাইপ, যা উন্নীত হবে int
)। এটি পাস একটি বাগ হবে long
, size_t
ইত্যাদি,
%s
মূল স্ট্রিংয়ের একটি সাব-স্ট্রিং মুদ্রণ করা। এই ব্যবহারের ক্ষেত্রে, str
মূল স্ট্রিংয়ের ভিতরে (সম্ভবত শুরুতে) কোথাও নির্দেশ str_len
করবে এবং প্রিন্ট করা উচিত এমন সাব-স্ট্রিংয়ের দৈর্ঘ্য নির্দিষ্ট করবে।
আরো বিস্তারিত এখানে ।
পূর্ণসংখ্যা মান বা
*
এটি ন্যূনতম ক্ষেত্রের প্রস্থ নির্দিষ্ট করে। ফলাফলটি স্থানের অক্ষরগুলি (ডিফল্টরূপে) দিয়ে প্যাড করা হয়, যদি প্রয়োজন হয়, বামদিকে ডান-ন্যায়সঙ্গত যখন বা ডানদিকে বাম-ন্যায়সঙ্গত হয়। ক্ষেত্রে যখন * ব্যবহৃত হয়, প্রস্থটি টাইপ int এর অতিরিক্ত যুক্তির দ্বারা নির্দিষ্ট করা হয়। যদি আর্গুমেন্টের মানটি নেতিবাচক হয় তবে এটি - পতাকা নির্দিষ্ট এবং ধনাত্মক ক্ষেত্রের প্রস্থের সাথে ফলাফল দেয়। (দ্রষ্টব্য: এটি সর্বনিম্ন প্রস্থ: মানটি কখনই কাটা হয় না))
.
এর পরে পূর্ণসংখ্যার নম্বর বা *, বা কোনওটি রূপান্তরটির যথার্থতা নির্দিষ্ট করে না। ক্ষেত্রে যখন * ব্যবহৃত হয়, প্রচ্ছন্নতা টাইপ int এর অতিরিক্ত যুক্তির দ্বারা নির্দিষ্ট করা হয়। যদি এই যুক্তির মান negativeণাত্মক হয় তবে তা উপেক্ষা করা হবে। যদি কোনও সংখ্যা বা * ব্যবহার না করা হয় তবে যথার্থতা শূন্য হিসাবে নেওয়া হয়। নির্ভুলতার নির্ভুল প্রভাবের জন্য নীচের টেবিলটি দেখুন।
সুতরাং আমরা যদি উভয় রূপান্তর স্পেসিফিকেশন চেষ্টা
#include <stdio.h>
int main() {
int precision = 8;
int biggerPrecision = 16;
const char *greetings = "Hello world";
printf("|%.8s|\n", greetings);
printf("|%.*s|\n", precision , greetings);
printf("|%16s|\n", greetings);
printf("|%*s|\n", biggerPrecision , greetings);
return 0;
}
আমরা আউটপুট পেতে:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|
আমি মনে করি না উপরের কোডটি সঠিক তবে (এই বিবরণ অনুসারে printf()
) .*
উপায়টি
প্রস্থটি বিন্যাসের স্ট্রিংয়ে নির্দিষ্ট করা হয়নি তবে ফর্ম্যাট করতে হবে এমন যুক্তির পূর্ববর্তী অতিরিক্ত পূর্ণসংখ্যার মান যুক্তি হিসাবে ''
সুতরাং এটি একটি আর্গুমেন্ট হিসাবে প্যাসেবল প্রস্থ সহ একটি স্ট্রিং।
int
(অথবা এটা একটি উপসেট) - আরও বেশি ধারণাসম্পন্ন মত না শুধু কোনো অবিচ্ছেদ্য মান size_t
বা তার সম্ভাব্য alias লেখা, মত std::string::size_type
। এটি আরও বিভ্রান্তিকর, বিবেচনায় নেওয়া যে রেফারেন্সড পৃষ্ঠাটি size_t
সমর্থিত ধরণের স্পেসিফায়ারগুলির একটি হিসাবে উল্লেখ করেছে ।
দেখুন: http://www.cplusplus.com/references/clibrary/cstdio/printf/
.*
যথার্থতাটি ফর্ম্যাট স্ট্রিংয়ে নির্দিষ্ট করা হয়নি, তবে ফর্ম্যাট করতে হবে এমন আর্গুমেন্টের পূর্ববর্তী অতিরিক্ত পূর্ণসংখ্যার মান যুক্তি হিসাবে।
s
অক্ষরের স্ট্রিং
printf
কল নয় ।