স্ট্রিং এ অ্যারের মতো সাইজ নির্ধারণ করা যায়। কিন্তু আমার প্রশ্ন হচ্ছে যে স্ট্রিং এ উল্লেখিত সাইজের বেশি ক্যারেক্টার ইনপুট নিলেও তা কোনো ওয়ার্নিং বা এরর ছাড়াই প্রিন্ট করে কেন? যেমনঃ

#include <stdio.h> int main() { char a[5]; scanf("%s",a); printf("%s",a); return 0; }

এই কোডটিতে সাইজ ৫ ঠিক করে দিয়েছি কিন্তু ইনপুটে এর থেকে বেশি নিয়ে প্রিন্ট করলে তা ঠিকঠাকই প্রিন্ট করছে।

asked 13 Oct '17, 06:34

asifjoardar's gravatar image

asifjoardar
314

edited 13 Oct '17, 08:57

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
74618


এটাকে বলে Undefined behavior . অর্থাৎ এই ধরনের অবস্থায় কম্পাইলার কি করবে তার কোনো নির্দেশনা নেই। অন্যান্য ভাষায় ArrayIndexOutOfBound এই চেক টা করা আছে কিন্তু সিতে এটা নেই । এই জন্য সিতে আপনি কোন এরর পাবেন না ।

তবে আপনি যদি চান যে আপনি ৫ টার বেশি ইনপুট নেবেন না তবে ,

scanf("%5s",s1);

এভাবে ইনপুট নিতে পারেন ।

সিতে আরও কি কি Undefined behavior আছে সেগুলো জানতে আপনি গুগলে সার্চ করতে পারেন ।

ধন্যবাদ।

permanent link

answered 13 Oct '17, 08:40

menon's gravatar image

menon
4.7k335

edited 13 Oct '17, 08:53

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
74618

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×17

question asked: 13 Oct '17, 06:34

question was seen: 347 times

last updated: 13 Oct '17, 08:57