PDA

View Full Version : سوال: مشکل این برنامه ای که نوشتم چیه ؟(تابع printf تو مقدار تولید میکنه)



snbb000
شنبه 19 مرداد 1392, 03:24 صبح
سلام .
دوستان چرا در برنامه با
for(i =0 ; i < k ; i++)
{
printf("%c",to[i]);
}

خروجی درست چاپ میشه اما با

printf("\n\n%s",to);

مقادیر دیگه ای همه همراه به مقدار ما چاپ می کنه؟
ممنون میشم توضیح بدید که در خروجی دومی که چاپ میکنیم چه افاقی میوفته که مقادیر دیگه ای هم چاپ میشه
ممنون

#include <stdio.h>
#include <conio.h>
void escape(char [],char []);
int main()
{
char from[80],to[80];
int i,j;
printf("From : ");
for(i = 0 ; i < 80 ; i++)
{
from[i]=getchar();
if(from[i] == '\n')
{
break;
}
}

escape(from,to);
}
void escape(char from[],char to[])
{
int i = 0 ,k = 0;

while(from[i] != '\n')

{
to[k] = from[i];
k++;
i++;
}

for(i =0 ; i < k ; i++)
{
printf("%c",to[i]);
}


printf("\n\n%s",to);





}

مصطفی ساتکی
شنبه 19 مرداد 1392, 07:14 صبح
انتهای رشته را با '\0' مشخص کنید و گرنه مشخص نیست رشته تا کجا ادامه داره.
کد اصلاح شده:

void escape(char from[],char to[])
{
int i = 0 ,k = 0;

while(from[i] )

{
to[k] = from[i];
k++;
i++;
}
to[i]='\0';
for(i =0 ; i < k ; i++)
{
printf("%c",to[i]);
}


printf("\n\n%s",to);



}
int main()
{
char from[80],to[80];
int i,j;
printf("From : ");
for(i = 0 ; i < 80 ; i++)
{
from[i]=getchar();
if(from[i] == '\n')
{
break;
}
}
from[i] ='\0';

escape(from,to);
}

omidshaman
شنبه 19 مرداد 1392, 13:05 عصر
خط 29 باید باشه

for(i = 0 ; i < 79; i++)
چون قراره اخری \0 گزاشته بشه

snbb000
شنبه 19 مرداد 1392, 19:13 عصر
انتهای رشته را با '\0' مشخص کنید و گرنه مشخص نیست رشته تا کجا ادامه داره.
کد اصلاح شده:

void escape(char from[],char to[])
{
int i = 0 ,k = 0;

while(from[i] )

{
to[k] = from[i];
k++;
i++;
}
to[i]='\0';
for(i =0 ; i < k ; i++)
{
printf("%c",to[i]);
}


printf("\n\n%s",to);



}
int main()
{
char from[80],to[80];
int i,j;
printf("From : ");
for(i = 0 ; i < 80 ; i++)
{
from[i]=getchar();
if(from[i] == '\n')
{
break;
}
}
from[i] ='\0';

escape(from,to);
}

ممنون
فقط یک سوال . چون \0 رو آخر رشته نگذاشته بودم با pritnf("%s مقادیر دیگه ای هم چاپ میشد ؟

مصطفی ساتکی
شنبه 19 مرداد 1392, 19:29 عصر
بله. چون انتهای رشته مشخص نبود خانه حافظه های بعد از رشته شما پیمایش می شد و قاعدتا در هنگام نمایش یه چیزی نا مفهومی هستش