PDA

View Full Version : مشکل این تابع strcat که نوشتم چیه ؟



snbb000
یک شنبه 03 شهریور 1392, 18:37 عصر
سلام . من تابع str_cat رو به صورت زیر نوشتم میشه بگید مشکلش کجاست ؟
اجرا میکنم کاری رو که باید انجام بده نمیده .
میدونم میشه به شکل های دیگه نوشت اما میخوام بدونم اینطوری که من نوشتم چرا مشکل داره

ممنون

#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);

}

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


while(*t)
t++;


for(; (*t = *f) && (*f != '\0') ; f++,t++)
;
*t++ = '\0';
printf("%s",t);

}






و ممنون میشم اگر توضیح بدید چرا همچین مشکلی پیش اومده

omidshaman
یک شنبه 03 شهریور 1392, 20:11 عصر
اون ; چیه بعده حلقه های for گزاشتی؟ چرا این مدلی مینویسی اصلا ؟! خب یک اکولاد باز کن
این دیگه چه جور for ایه؟!

for(; (*t = *f) && (*f != '\0') ; f++,t++)
;
*t++ = '\0';
,در ضمن سایز یکی از ارایه ها هم باید دوبرابر اون یکی باشه نه این که ۲ تا سایزشون مساوی باشه

omidshaman
یک شنبه 03 شهریور 1392, 20:22 عصر
دلیل اشتباه بودنش اینه که داری t رو ++ می کنی میری اخرش اگر بخوای چاپش کنی باید دوباره برگرده اول t ! یعنی الان t توی str_cat قبل از پرینت داره به یک فضای نامشخص اشاره می کنه .

snbb000
یک شنبه 03 شهریور 1392, 20:27 عصر
ممنون . چطور باید برگردم به اولش که بتونم چاپش کنم ؟
فکر کنم مشکل همینی باشه که میگید .

omidshaman
یک شنبه 03 شهریور 1392, 20:44 عصر
int i;
for( i=0; (*t = *f) && (*f != '\0'); f++,t++,i++)
;
*t = '\0';
for(i;i>0;i--)
t--;

snbb000
یک شنبه 03 شهریور 1392, 23:28 عصر
ممنون . فقط یک سوال دیگه که آخرین سوال باشه .
بدونه این هیچ راه دیگه ای نیست ؟ چون من یک نسخه دیگه این رو با while دیده بودم به این صورت while(*t++ = *f++) اما این دیگه بر نگشته بود به به اول رشته و راحت چاپ میشد
میشه در باره ی اینم توضیح بدید ؟ ممنون

omidshaman
دوشنبه 04 شهریور 1392, 10:37 صبح
اینو ببین

void str_cat(char f[],char t[])
{

int i=0;
while(*(t+i))
{
i++;
}
for( ;*f != '\0'; f++,i++)
{
*(t+i)=*f;
}
;
*(t+i) = '\0';
printf("%s",t);

}

snbb000
دوشنبه 04 شهریور 1392, 11:23 صبح
اینو ببین

void str_cat(char f[],char t[])
{

int i=0;
while(*(t+i))
{
i++;
}
for( ;*f != '\0'; f++,i++)
{
*(t+i)=*f;
}
;
*(t+i) = '\0';
printf("%s",t);

}


واقعا برام جالب شد . در حالی که شما بر نگشتید به اول *t اما کد داره درست عمل میکنه .
میشه توضیح بدید که چه اتفاقی داره میوفته ؟ ممنون