মনে করুন আপনার কাছে একটি স্ট্রিং রয়েছে যা null
শেষ হয়নি এবং আপনি তার সঠিক আকারটি জানেন, সুতরাং আপনি কীভাবে সেই স্ট্রিংটি printf
সি দিয়ে মুদ্রণ করতে পারেন ? আমি এরকম একটি পদ্ধতি স্মরণ করি তবে আমি এখনই খুঁজে পাচ্ছি না ...
মনে করুন আপনার কাছে একটি স্ট্রিং রয়েছে যা null
শেষ হয়নি এবং আপনি তার সঠিক আকারটি জানেন, সুতরাং আপনি কীভাবে সেই স্ট্রিংটি printf
সি দিয়ে মুদ্রণ করতে পারেন ? আমি এরকম একটি পদ্ধতি স্মরণ করি তবে আমি এখনই খুঁজে পাচ্ছি না ...
উত্তর:
প্রিন্টফের সাথে একটি সম্ভাবনা রয়েছে, এটি এরকম হয়:
printf("%.*s", stringLength, pointerToString);
কোনও কিছু অনুলিপি করার দরকার নেই, মূল স্ট্রিং বা বাফারটি সংশোধন করার দরকার নেই।
printf
এক দশক পরেও যেমন মৌলিক জিনিসগুলি সম্পর্কে জিনিসগুলি শিখি তখন আমি এটি পছন্দ করি ... :)
printf
১১ টি অক্ষর মুদ্রিত হবে বা যতক্ষণ না প্রথমে আসে তার সাথে NULL এর মুখোমুখি হবে; আপনার উদাহরণে NULL প্রথম আসে। সর্বাধিক দৈর্ঘ্য উল্লেখ করা NULL এর "শেষ-স্ট্রিং" অর্থটি হারাবে না printf
।
এখানে কীভাবে %.*s
কাজ করে তার ব্যাখ্যা এখানে দেওয়া হয়েছে ।
একটি প্রিন্টফ টেমপ্লেট স্ট্রিংয়ের রূপান্তরকরণের স্পেসিফিকেশনের সাধারণ ফর্ম রয়েছে:
% [ param-no $] flags width [ . precision ] type conversion
অথবা
% [ param-no $] flags width . * [ param-no $] type conversion
দ্বিতীয় ফর্মটি আর্গুমেন্ট তালিকা থেকে নির্ভুলতা পাওয়ার জন্য:
আপনি '*' এর যথার্থতাও নির্দিষ্ট করতে পারেন। এর অর্থ হ'ল আর্গুমেন্ট তালিকার পরবর্তী যুক্তিটি (প্রকৃত মান মুদ্রণের আগে) যথার্থ হিসাবে ব্যবহৃত হয়। মানটি অবশ্যই একটি আন্ত হতে হবে এবং এটি নেতিবাচক হলে তা এড়ানো হবে।
- আউটপুট রূপান্তর বাক্য গঠন গ্লিবিসি ম্যানুয়ালটিতে
জন্য %s
স্ট্রিং বিন্যাসন, স্পষ্টতা একটি বিশেষ অর্থ রয়েছে:
সর্বাধিক সংখ্যক অক্ষর লেখার জন্য একটি নির্ভুলতা নির্দিষ্ট করা যেতে পারে; অন্যথায় স্ট্রিংয়ের মধ্যে অক্ষরগুলি শেষ হওয়া নাল অক্ষর সহ আউটপুট প্রবাহে লেখা হয়।
- অন্যান্য আউটপুট রূপান্তর গ্লিবিসি ম্যানুয়ালটিতে
অন্যান্য দরকারী রূপগুলি:
"%*.*s", maxlen, maxlen, val
ডান ন্যায়সঙ্গত করা হবে, স্পেস আগে beforeোকানো;"%-*.*s", maxlen, maxlen, val
বাম-ন্যায়সঙ্গত হবে।"%-*.*s", padding, str_view.size(), str_view.data()
আপনি stdout একটি fwrit () ব্যবহার করতে পারেন!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
এই পদ্ধতিতে আপনি প্রথম অক্ষরটিকে (একটি ফাইলের সাথে সংখ্যার_সংখ্যার_চর্চায় পরিবর্তনশীল সংখ্যায়) আউটপুট দেবেন, এক্ষেত্রে স্টাডআউটে (স্ট্যান্ডার্ড আউটপুট, আপনার স্ক্রিন)!
printf("%.*s", length, string)
কাজ করবে না.
এর অর্থ দৈর্ঘ্য বাইট বা একটি নাল বাইট, যেটি প্রথমে আসে মুদ্রণ করা। যদি আপনার নন-নল-টার্মিনেটেড অ্যারে অফ-চর দৈর্ঘ্যের আগে নাল বাইট থাকে তবে প্রিন্টফ সেগুলি বন্ধ হয়ে যাবে এবং চালিয়ে যাবে না।
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
আমি কোডটি সম্পাদনা করেছি, এখানে অন্যভাবে:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}
C
কনটেক্সট, সমস্ত স্ট্রিং নাল সমাপ্ত হয়। এগুলির মধ্যে একটি শূন্য ছাড়াই চরের অ্যারেগুলি স্ট্রিং নয় ... তারা চরের অ্যারে :)