PDA

View Full Version : چرا دستور printf در جاها مختلف برنامه جواب های مخالفی داره ؟



snbb000
دوشنبه 04 شهریور 1392, 10:34 صبح
سلام . دوستان به کد زیر توجه کنید .

#include <stdio.h>
#include <conio.h>
#include <string.h>
void str_cat(char *, char *);
int main()
{
char f[80],t[80];
printf("From : ");
int i ;
for(i = 0 ; (f[i] = getchar())!= '\n';i++)
;
f[i] = '\0';
printf("To : ");
for(i = 0 ; (t[i] = getchar())!= '\n';i++)
;
t[i] = '\0';

str_cat(f,t);
printf("%s",t);
}

void str_cat(char *f,char *t)
{


while(*t)
t++;


for(; (*t = *f) && (*f != '\0') ; f++,t++)

;

*t++ = '\0';






}


من printf("%s",t); رو که توی تابع main مینویسم همه چیز درسته اما اگه همونو توی تابع str_cat به صورت زیر بنویسم

void str_cat(char *f,char *t)
{


while(*t)
t++;


for(; (*t = *f) && (*f != '\0') ; f++,t++)

;

*t++ = '\0';

printf("%s",t);




}

اجرا نمیشه و نتیجه نامشخص داره . میشه بگید دلیلش چیه ؟ و چرا اینطور میشه ؟
ممنون

hadi0x7c7
دوشنبه 04 شهریور 1392, 13:10 عصر
دلیلش اینه که t داره به انتهای رشته اشاره میکنه

void str_cat(char *f,char *t)
{
int count = 0;

while(*t) {
t++;
count++;
}


for(; (*t = *f) && (*f != '\0') ; f++,t++, count++)

;

*t++ = '\0';
printf("%s",t - count - 1);
}

این فکر کنم درست کار کنه

snbb000
دوشنبه 04 شهریور 1392, 13:17 عصر
دقیقا سوال من هم همینه چرا توی تابع str_cat به آخر رشته اشاره میکنه ولی توی main به اول رشته ؟
توی main که ما چیزی رو عوض نکردیم اما خودش میره به اول رشته دلیل این موضوع چیه ؟ ممنون

omidshaman
دوشنبه 04 شهریور 1392, 13:27 عصر
توی c/C++‎ وقتی یک ارایه رو میفرستی به یک فانکشن فقط ادرس خونه اولش فرستاده میشه واسه همین t تو main با t تو فانکشن فرق داره
t تو main ادرس یک ارایه + سایز آرایه و... توش دخیره شدن برای همینه که توی main نمی تونی t++ رو انجام بدی چون تو c مشخصات ارایه کاملا ثابتن.(یعنی موقعیت خونه اول سایز و... کاملا ثابته )
ولی t توی فانکشن یک پوینتره به خونهی اول ارایه که خب برای این که با استفاده از پوینتر بخوایم ارایه رو چاپ کنیم باید پوینتر به خونه اول اشاره کنه
شما یک قطار رو در نظر بگیر t تو main میشه کل قطار ولی t توی فانکشن فقط میشه واگن اول حالا اگر بخوای کل طول قطار رو حرکت کنی واضحه که بایداز همون واگن اول شروع به حرکت کنی شما اون فانکشنی که نوشتی برای پرینت از واگن اخر شروع میکنی حرکتو که کلا از قطار پرتی میشی بیرون !.