যে কেউ এর ভিন্নতা নিয়ে সহজ ইংরেজিতে ব্যাখ্যা করতে পারবেন printf
, fprintf
এবং sprintf
উদাহরণ?
এটা কোন প্রবাহে?
"সি হ্যান্ডলিং ইন সি" সম্পর্কে পড়ার সময় আমি এই তিনটির মধ্যে সত্যিই বিভ্রান্ত হয়ে পড়েছি।
যে কেউ এর ভিন্নতা নিয়ে সহজ ইংরেজিতে ব্যাখ্যা করতে পারবেন printf
, fprintf
এবং sprintf
উদাহরণ?
এটা কোন প্রবাহে?
"সি হ্যান্ডলিং ইন সি" সম্পর্কে পড়ার সময় আমি এই তিনটির মধ্যে সত্যিই বিভ্রান্ত হয়ে পড়েছি।
উত্তর:
সি-তে, একটি "স্রোত" একটি বিমূর্ততা; প্রোগ্রামের দৃষ্টিকোণ থেকে এটি কেবলমাত্র বাইটের উত্পাদনকারী (ইনপুট স্ট্রিম) বা গ্রাহক (আউটপুট স্ট্রিম)। এটি ডিস্কে থাকা কোনও ফাইলের সাথে কোনও পাইপের সাথে, আপনার টার্মিনালের সাথে বা প্রিন্টার বা টিটিআইয়ের মতো অন্য কোনও ডিভাইসের সাথে মিল রাখতে পারে। FILE
টাইপ প্রবাহ সম্পর্কে তথ্য উপস্থিত রয়েছে। সাধারণত, আপনি FILE
সরাসরি কোনও অবজেক্টের বিষয়বস্তু নিয়ে গণ্ডগোল করবেন না , আপনি কেবলমাত্র এটিতে পয়েন্টারটি বিভিন্ন আই / ও রুটিনগুলিতে প্রেরণ করেন।
তিনটি স্ট্যান্ডার্ড স্ট্রিম রয়েছে: stdin
স্ট্যান্ডার্ড ইনপুট স্ট্রিমের stdout
একটি পয়েন্টার, স্ট্যান্ডার্ড আউটপুট স্ট্রিমের stderr
একটি পয়েন্টার এবং এটি স্ট্যান্ডার্ড ত্রুটি আউটপুট স্ট্রিমের পয়েন্টার। একটি ইন্টারেক্টিভ সেশনে, তিনটি সাধারণত আপনার কনসোলকে বোঝায়, যদিও আপনি তাদের অন্য ফাইল বা ডিভাইসে নির্দেশিত করতে পুনর্নির্দেশ করতে পারেন:
$ myprog < inputfile.dat > output.txt 2> errors.txt
এই উদাহরণে, stdin
এখন পয়েন্ট inputfile.dat
, stdout
পয়েন্ট output.txt
এবং stderr
পয়েন্ট errors.txt
।
fprintf
আপনার নির্দিষ্ট আউটপুট স্ট্রিমে ফর্ম্যাট করা পাঠ্য লিখুন।
printf
লেখার সমতুল্য fprintf(stdout, ...)
এবং যেখানে স্ট্যান্ডার্ড আউটপুট প্রবাহটি বর্তমানে পয়েন্ট করছে সেখানে ফর্ম্যাট পাঠ্য লিখেছে।
sprintf
char
একটি স্ট্রিমের বিপরীতে বিন্যাসিত পাঠ্যকে একটি অ্যারেতে লিখুন ।
প্রিন্টফ ("ফর্ম্যাট", আরগস) স্ট্যান্ডার্ড আউটপুট যা প্রায়শই একটি কম্পিউটার মনিটর হয় তথ্য মুদ্রণ করতে ব্যবহৃত হয়।
স্প্রিন্টফ (চর *, "ফর্ম্যাট", আরগস) প্রিন্টফের মতো। স্ট্যান্ডার্ড আউটপুট অর্থাৎ একটি মনিটরে ফরমেটেড স্ট্রিংটি প্রদর্শন করার পরিবর্তে এটি চার্ট পয়েন্টার (খুব প্রথম প্যারামিটার) দ্বারা নির্দেশিত স্ট্রিংয়ে ফর্ম্যাট করা ডেটা সংরক্ষণ করে। স্ট্রিং অবস্থানটি প্রিন্টফ এবং স্প্রিন্ট সিনট্যাক্সের মধ্যে একমাত্র পার্থক্য।
fprintf (FILE * fp, "format", args) আবার প্রিন্টফের মতো। এখানে মনিটরে ডেটা প্রদর্শন করা বা কিছু স্ট্রিং-এ সেভ করার পরিবর্তে ফর্ম্যাট করা ডেটা ফাইলের মধ্যে সেভ করা হয় যা ফাইল পয়েন্টার দ্বারা চিহ্নিত করা হয় যা এফপ্রিন্টফের প্রথম পরামিতি হিসাবে ব্যবহৃত হয়। ফাইল পয়েন্টার হ'ল প্রিন্টফের সিনট্যাক্সের একমাত্র সংযোজন।
যদি স্টার্ডআউট ফাইলটি এফপ্রিন্টেফের প্রথম পরামিতি হিসাবে ব্যবহৃত হয়, তবে এর কাজটি তখন প্রিন্টফের সমতুল্য হিসাবে বিবেচিত হয়।
printf(...)
সমতূল্য fprintf(stdout,...)
।
fprintf
স্ট্রিম আউটপুট ব্যবহার করা হয়।
sprintf(buffer,...)
একটি বাফারে একটি স্ট্রিং ফর্ম্যাট করতে ব্যবহৃত হয়।
নোটও আছে vsprintf
, vfprintf
এবংvprintf
v
স্বাদে অ-মানক আমি বিশ্বাস হয়
v
স্বাদে সি মান খুব অবশ্যই আছে।
আপনি ভার্সনপ্রিন্টফ () ফাংশন সহ খুব দরকারী জিনিসগুলি করতে পারেন:
$ cat test.cc
#include <exception>
#include <stdarg.h>
#include <stdio.h>
struct exception_fmt : std::exception
{
exception_fmt(char const* fmt, ...) __attribute__ ((format(printf,2,3)));
char const* what() const throw() { return msg_; }
char msg_[0x800];
};
exception_fmt::exception_fmt(char const* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vsnprintf(msg_, sizeof msg_, fmt, ap);
va_end(ap);
}
int main(int ac, char** av)
{
throw exception_fmt("%s: bad number of arguments %d", *av, ac);
}
$ g++ -Wall -o test test.cc
$ ./test
terminate called after throwing an instance of 'exception_fmt'
what(): ./test: bad number of arguments 1
Aborted (core dumped)
vsnprintf
এটি একটি অ-মানক ফাংশন। বেশিরভাগ বাস্তবায়ন আমি এটি বা এর মতো কিছু বাস্তবায়ন করতে দেখেছি তবে এটি বাস্তবায়ন-নির্দিষ্ট।
printf,
printf("control string ", argument );
fprintf
fprintf (filename, "control string ", argument );
স্প্রিন্টফ: স্ট্যান্ডআউটের পরিবর্তে মেমরির একটি অক্ষরের স্ট্রিংয়ে ফর্ম্যাট করা ডেটা লিখে
স্প্রিন্টফের সিনট্যাক্সটি হ'ল:
#include <stdio.h>
int sprintf (char *string, const char *format
[,item [,item]…]);
এখানে,
স্ট্রিং পয়েন্টারটিকে মেমরির একটি বাফারকে বোঝায় যেখানে ডেটা লিখতে হবে।
বিন্যাসটি বিন্যাসকে সংজ্ঞায়িত করে একটি অক্ষরের স্ট্রিংকে নির্দেশককে বোঝায়।
প্রতিটি আইটেম একটি পরিবর্তনশীল বা অভিব্যক্তি যা ডেটা লিখতে নির্দিষ্ট করে।
স্প্রিন্টফ দ্বারা প্রদত্ত মান শূন্যের চেয়ে বড় বা সমান হয় অপারেশন সফল হলে বা অন্য কথায় রচিত অক্ষরের সংখ্যা, শেষ নাল অক্ষর গণনা না করে ফিরে আসে এবং ত্রুটি ঘটলে শূন্যের চেয়ে কম মান প্রদান করে returns
মুদ্রণযোগ্য: প্রিন্ট করুন stdout
প্রিন্টফের জন্য সিনট্যাক্সটি হ'ল:
printf format [argument]…
স্প্রিন্টফ () এবং প্রিন্টফ () এর মধ্যে একমাত্র পার্থক্য হ'ল স্প্রিন্টফ () একটি অক্ষর অ্যারেতে ডেটা লেখেন, যখন প্রিন্টফ () স্ট্যান্ডআউট, স্ট্যান্ডার্ড আউটপুট ডিভাইসে ডেটা লেখেন।