তবে আমি যদি কোনও স্ট্রিং মুদ্রণ করতে চাইতাম তবে প্রিন্টফ ("হ্যালো") বলুন যদিও আমি খুঁজে পেয়েছি যে নীচের বিবৃতি দিয়ে \ 0 দিয়ে শেষ হয় না
printf("%d", printf("hello"));
Output: 5
আপনি ভুল. এই বিবৃতিটি নিশ্চিত করে না যে স্ট্রিং আক্ষরিক "hello"
সমাপ্ত শূন্য অক্ষরের সাথে শেষ হয় না '\0'
। এই বিবৃতি নিশ্চিত করেছে যে ফাংশনprintf
সমাপ্তি শূন্য অক্ষরের সম্মুখীন না হওয়া অবধি একটি স্ট্রিংয়ের উপাদানগুলিকে আউটপুট করে।
আপনি যখন উপরের স্টেটমেন্টের মতো স্ট্রিং আক্ষরিক ব্যবহার করছেন তখন সংকলক স্থিতিশীল স্টোরেজ সময়কাল সহ একটি অক্ষর অ্যারে তৈরি করে যার মধ্যে স্ট্রিং আক্ষরিক উপাদান রয়েছে।
সুতরাং বাস্তবে এই অভিব্যক্তি
printf("hello")
নিম্নলিখিত মত কিছু সংকলক দ্বারা প্রক্রিয়া করা হয়
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
এটিতে ফাংশন প্রিন্টফের এই ক্রিয়াটি আপনি নিম্নোক্ত উপায়ে কল্পনা করতে পারেন
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
আক্ষরিক "হ্যালো" স্ট্রিংয়ে থাকা অক্ষরের সংখ্যা পেতে আপনি নিম্নলিখিত প্রোগ্রামটি চালাতে পারেন
#include <stdio.h>
int main(void)
{
char literal[] = "hello";
printf( "The size of the literal \"%s\" is %zu\n", literal, sizeof( literal ) );
return 0;
}
প্রোগ্রাম আউটপুট হয়
The size of the literal "hello" is 6
);
আপনি সেই কোডটি দিয়ে কী দেখানোর ইচ্ছা রাখছেন? আপনি কীভাবে প্রমাণ করেছেন যে এটি একটি দিয়ে শেষ হয় না\0
?