PDA

View Full Version : تابع strlen



1myself
جمعه 05 دی 1393, 00:53 صبح
با سلام
چرا برنامه زیر null چاپ می کند؟
<include<stdio.h
<include<stdlib.h
<include<string.h
}(void copy(char *d,char *s
;(d=(char*)malloc(((strlen(s))+1)*sizeof(char
;(strcpy(d,s

{
}()int main
;char *d
("copy(d,"name
;(printf("%s",d
}

مسعود اقدسی فام
جمعه 05 دی 1393, 01:34 صبح
زمانی که malloc می‌کنید فضای جدیدی درست می‌شه و آدرس اون داخل d (داخل تابع) قرار می‌گیره و نه اینکه فضا رو با شروع از آدرس d رزرو می‌کنه. بنابراین آدرس d ارسالی برای تابع گم می‌شه و عملیات بعدی هم روی آدرس جدید انجام می‌شه. وقتی از تابع برمی‌گرده محتوای رشته‌ی d تابع اصلی چاپ می‌شه که خب می‌تونه هر چیزی باشه و در کل ربطی به آدرسی که داخل تابع اختصاص داده شده نداره.