নিম্নোক্ত কোডটি সম্পর্কে :

int main() 
{ 
char str1[] = "bangla", str2[] = "desh", str3[12];

int i, j, length1 = 6, length2 = 4;

    
for(i = 0, j = 0; i < length1; i++, j++)
{ 
str3[j] = str1[i];
}

    
for(i = 0; i < length2; i++, j++) 
{ 
str3[j] = str2[i]; 
}

     
str3[j] = '\0'; 
    
printf("%s\n", str3); 
    
return 0; 
}

এই কোডটি রান করালে bangladesh প্রিন্ট করে। কোডটিতে str3[6] করা হয় তখন ও Bangladesh প্রিন্ট হয়। কিন্তু যখন str3[5] করা হয় তখন banglaaaaa প্রিন্ট করে আবার str3[2] করলে banglangla প্রিন্ট করে। আমি এখানে বুঝতে পারছি না। str[6] ধরলে ঠিকই প্রিন্ট হচ্ছে কিন্তু এর নিচের মান ধরলে আলাদা প্রিন্ট হচ্ছে। এর কারন টা কি?

asked 30 Oct '16, 17:22

Md%20Adil's gravatar image

Md Adil
537

edited 30 Oct '16, 18:14

Tamanna%20Nishat%20Rini's gravatar image

Tamanna Nishat Rini ♦♦
2.9k211


memory overwite হওয়ার কারনে এরকম হচ্ছে । আপনার code টা এভাবে লিখে দেখেনঃ

#include<stdio.h>
int main()
{
char str1[] = "bangla",str2[] = "desh", str3[4];

int i, j, length1 = 6, length2 = 4;

printf("%d %d %d\n",str1,str2,str3);
for(i = 0, j = 0; i < length1; i++, j++)
{
str3[j] = str1[i];
printf("%d %c %d\n",j,str3[j],&str3[j]);
}

for(i = 0; i < length2; i++, j++)
{

str3[j] = str2[i];
printf("%d %c %d\n ",j,str3[j],&str3[j]);
}


str3[j] = '\0';

printf("%s %s %s\n",str1,str2, str3);

return 0;
}

এভাবে run করলে দেখবেন যে, আপনার declare করা string গুলো পর পর memory তে assign হচ্ছে । যার ফলে যখন আপনি str[6] দিচ্ছেন তখন bangla ঠিক ভাবে copy হচ্ছে এবং desh স্ট্রিং টা তার নিজের ভ্যালু গুলো দিয়ে overwrite হচ্ছে । আর তাই bangladesh ঠিক ভাবে print হচ্ছে । কিন্তু যখন ৬ এর কম নিচ্ছেন যেমন ৪ তখন প্রথম loop টা bang copy করছে আর দ্বিতীয় loop টা la এই অংশটুকু desh string টার memory address ব্যাবহার করছে এবং সেটা la দিয়ে replace করছে । ফলে output banglalala হয়ে যাচ্ছে . আশা করি বুঝতে পরেছেন । ধন্যবাদ

permanent link

answered 31 Oct '16, 16:15

Anisur%20Rahman%20Tonu's gravatar image

Anisur Rahman Tonu
2079

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:

×341
×29

question asked: 30 Oct '16, 17:22

question was seen: 321 times

last updated: 31 Oct '16, 16:15