এফপ্রিন্টফ, প্রিন্টফ এবং স্প্রিন্টফের মধ্যে পার্থক্য?


233

যে কেউ এর ভিন্নতা নিয়ে সহজ ইংরেজিতে ব্যাখ্যা করতে পারবেন printf, fprintfএবং sprintfউদাহরণ?

এটা কোন প্রবাহে?

"সি হ্যান্ডলিং ইন সি" সম্পর্কে পড়ার সময় আমি এই তিনটির মধ্যে সত্যিই বিভ্রান্ত হয়ে পড়েছি।


4
কিছু নমুনা কোড লিখে তাদের সাথে পরীক্ষা করুন। তাদের মধ্যে পার্থক্য স্পষ্টভাবে বোঝার জন্য এটি খুব সহজ উপায় ।
নওয়াজ

14
মূর্খ বাফার ওভারফ্লো এড়াতে স্প্রিন্টফ () স্প্রিন্টফ () এ পছন্দ করুন।
ম্যাক্সিম এগারুশকিন

3
নির্বোধ বাফার ওভারফ্লো এবং কদর্য টাইপ-অসম্পূর্ণ বাগগুলি এড়াতে স্ট্রিম বা বুস্ট ফর্ম্যাটরগুলি পছন্দ করুন
জন ডিবলিং

7
@ ম্যাক্সিম, আপনি যখন একটি বৈধ পয়েন্ট উত্থাপন করবেন আমি তখন জ্ঞান সুরক্ষা গ্রহণ করব যে আমার বাফারগুলি উপচে পড়বে না এবং আমার অ্যাপটিকে টুকরো টুকরো টুকরো টুকরো টুকরো করে ফেলবে না। আমি কেবল তখনই এই ফাংশনগুলি দেখতাম যদি স্ট্রিম / বুস্ট ফর্ম্যাটরগুলি লক্ষণীয় বাধা সৃষ্টি করে দেখানো হয়। :)
মু-রস

1
@ ম্যাক্সিম: পয়েন্ট হ'ল, দরকার নেই। আমার কোডটি কোনও বাধা নয়। 5 মি / সেকেন্ডটি হ'ল এক্সচেঞ্জটি কত বার্তা প্রেরণ করে, আমরা প্রসেসিংয়ে কতটা সক্ষম capable তাহলে কেন অকালে অপটিমাইজ?
জন ডিবলিং

উত্তর:


237

সি-তে, একটি "স্রোত" একটি বিমূর্ততা; প্রোগ্রামের দৃষ্টিকোণ থেকে এটি কেবলমাত্র বাইটের উত্পাদনকারী (ইনপুট স্ট্রিম) বা গ্রাহক (আউটপুট স্ট্রিম)। এটি ডিস্কে থাকা কোনও ফাইলের সাথে কোনও পাইপের সাথে, আপনার টার্মিনালের সাথে বা প্রিন্টার বা টিটিআইয়ের মতো অন্য কোনও ডিভাইসের সাথে মিল রাখতে পারে। 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, ...)এবং যেখানে স্ট্যান্ডার্ড আউটপুট প্রবাহটি বর্তমানে পয়েন্ট করছে সেখানে ফর্ম্যাট পাঠ্য লিখেছে।

sprintfcharএকটি স্ট্রিমের বিপরীতে বিন্যাসিত পাঠ্যকে একটি অ্যারেতে লিখুন ।


4
"এটি কেবলমাত্র বাইটের উত্পাদক (ইনপুট স্ট্রিম) বা গ্রাহক (আউটপুট স্ট্রিম))" এগুলি কি পিছনের দিকে? কোনও প্রযোজক কিছু তৈরি করবেন না (আউটপুট)? জিজ্ঞাসা করছি কারণ আমি সত্যই জানি না।
ডেভ ভয়েসস

6
@ ডেভভয়েলস: এগুলি আপনার প্রোগ্রামের দৃষ্টিকোণ থেকে। একটি ইনপুট স্ট্রিম আপনার প্রোগ্রামটি পড়ার জন্য বাইট তৈরি করে; একটি আউটপুট স্ট্রিম আপনার প্রোগ্রাম থেকে উত্পাদিত বাইট গ্রাস করে।
জন বোদে

153

printfস্ট্যান্ডার্ড আউটপুট স্ট্রিমের আউটপুট ( stdout)

fprintfএকটি ফাইল হ্যান্ডেল যায় ( FILE*)

sprintfআপনার বরাদ্দ করা বাফারে যায় ( char*)


39

প্রিন্টফ ("ফর্ম্যাট", আরগস) স্ট্যান্ডার্ড আউটপুট যা প্রায়শই একটি কম্পিউটার মনিটর হয় তথ্য মুদ্রণ করতে ব্যবহৃত হয়।

স্প্রিন্টফ (চর *, "ফর্ম্যাট", আরগস) প্রিন্টফের মতো। স্ট্যান্ডার্ড আউটপুট অর্থাৎ একটি মনিটরে ফরমেটেড স্ট্রিংটি প্রদর্শন করার পরিবর্তে এটি চার্ট পয়েন্টার (খুব প্রথম প্যারামিটার) দ্বারা নির্দেশিত স্ট্রিংয়ে ফর্ম্যাট করা ডেটা সংরক্ষণ করে। স্ট্রিং অবস্থানটি প্রিন্টফ এবং স্প্রিন্ট সিনট্যাক্সের মধ্যে একমাত্র পার্থক্য।

fprintf (FILE * fp, "format", args) আবার প্রিন্টফের মতো। এখানে মনিটরে ডেটা প্রদর্শন করা বা কিছু স্ট্রিং-এ সেভ করার পরিবর্তে ফর্ম্যাট করা ডেটা ফাইলের মধ্যে সেভ করা হয় যা ফাইল পয়েন্টার দ্বারা চিহ্নিত করা হয় যা এফপ্রিন্টফের প্রথম পরামিতি হিসাবে ব্যবহৃত হয়। ফাইল পয়েন্টার হ'ল প্রিন্টফের সিনট্যাক্সের একমাত্র সংযোজন।

যদি স্টার্ডআউট ফাইলটি এফপ্রিন্টেফের প্রথম পরামিতি হিসাবে ব্যবহৃত হয়, তবে এর কাজটি তখন প্রিন্টফের সমতুল্য হিসাবে বিবেচিত হয়।


24

printf(...)সমতূল্য fprintf(stdout,...)

fprintf স্ট্রিম আউটপুট ব্যবহার করা হয়।

sprintf(buffer,...) একটি বাফারে একটি স্ট্রিং ফর্ম্যাট করতে ব্যবহৃত হয়।

নোটও আছে vsprintf, vfprintfএবংvprintf


vস্বাদে অ-মানক আমি বিশ্বাস হয়
জন Dibling

8
vস্বাদে সি মান খুব অবশ্যই আছে।
ফ্রেড ফু

@ এলারসম্যানস: আহ, ঠিক আছে সংশোধনীর জন্য ধন্যবাদ. এই প্রশ্নটি এক পর্যায়ে ট্যাগ হয়েছে [সি ++]
জন ডিবলিং

2

আপনি ভার্সনপ্রিন্টফ () ফাংশন সহ খুব দরকারী জিনিসগুলি করতে পারেন:

$ 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)

প্রকৃতপক্ষে +1 কার্যকর, তবে সচেতন হন যে vsnprintfএটি একটি অ-মানক ফাংশন। বেশিরভাগ বাস্তবায়ন আমি এটি বা এর মতো কিছু বাস্তবায়ন করতে দেখেছি তবে এটি বাস্তবায়ন-নির্দিষ্ট।
জন ডিবলিং

1
@ এলারসম্যানরা উপরে উল্লেখ করেছেন যে এটি আসলে সি স্ট্যান্ডার্ডের একটি অংশ, তাই আমি এটি ফিরিয়ে
নিই

2
এর সাথে সি এর কী সম্পর্ক?
একমাসে

2

printf,

  1. প্রিন্টফ স্ক্রিনে আউটপুট সঞ্চালনের জন্য ব্যবহৃত হয়।
  2. সিনট্যাক্স = printf("control string ", argument );
  3. এটি ফাইল ইনপুট / আউটপুট এর সাথে সম্পর্কিত নয়

fprintf

  1. এটি ফাইলের হ্যান্ডেল দ্বারা নির্দেশিত ফাইলটিতে লেখার ক্রিয়া সম্পাদন করতে ব্যবহৃত এফপ্রিন্টফ f
  2. বাক্য গঠনটি হ'ল fprintf (filename, "control string ", argument );
  3. এটি ফাইল ইনপুট / আউটপুট এর সাথে সম্পর্কিত

যদি এটি অন্য কোথাও থেকে উদ্ধৃত করা হয় তবে কোনও লিঙ্কের সাহায্যে উত্সটি উদ্ধৃত করা ভাল তবে অবশ্যই আপনি এখানে উদ্ধৃত পাঠ্যটি অবশ্যই রাখুন।
সুপারবিসাইডম্যান

0

fprintfএই স্ট্রিম যেখানে হিসেবে সম্পর্কযুক্ত printfএক বিবৃতিতে অনুরূপ fprintfকিন্তু স্ট্রিম এর সাথে সম্পর্কিত, যে fprintfফাইল সম্পর্কযুক্ত


0

স্প্রিন্টফ: স্ট্যান্ডআউটের পরিবর্তে মেমরির একটি অক্ষরের স্ট্রিংয়ে ফর্ম্যাট করা ডেটা লিখে

স্প্রিন্টফের সিনট্যাক্সটি হ'ল:

#include <stdio.h>
int sprintf (char *string, const char *format
[,item [,item]…]);

এখানে,

স্ট্রিং পয়েন্টারটিকে মেমরির একটি বাফারকে বোঝায় যেখানে ডেটা লিখতে হবে।

বিন্যাসটি বিন্যাসকে সংজ্ঞায়িত করে একটি অক্ষরের স্ট্রিংকে নির্দেশককে বোঝায়।

প্রতিটি আইটেম একটি পরিবর্তনশীল বা অভিব্যক্তি যা ডেটা লিখতে নির্দিষ্ট করে।

স্প্রিন্টফ দ্বারা প্রদত্ত মান শূন্যের চেয়ে বড় বা সমান হয় অপারেশন সফল হলে বা অন্য কথায় রচিত অক্ষরের সংখ্যা, শেষ নাল অক্ষর গণনা না করে ফিরে আসে এবং ত্রুটি ঘটলে শূন্যের চেয়ে কম মান প্রদান করে returns

মুদ্রণযোগ্য: প্রিন্ট করুন stdout

প্রিন্টফের জন্য সিনট্যাক্সটি হ'ল:

printf format [argument]…

স্প্রিন্টফ () এবং প্রিন্টফ () এর মধ্যে একমাত্র পার্থক্য হ'ল স্প্রিন্টফ () একটি অক্ষর অ্যারেতে ডেটা লেখেন, যখন প্রিন্টফ () স্ট্যান্ডআউট, স্ট্যান্ডার্ড আউটপুট ডিভাইসে ডেটা লেখেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.