שאלה על malloc ב-c
היי חברים,
לשם תרגול כתבתי פונקציה שמחברת בין מחרוזות. אבל משהו לא ברור לי:
void merge_strings(char s1[], char s2[]) {
char * os;
int min=0, i=0, c=0, max=0;
max=strlen(s1)+strlen(s2);
os=(char *) malloc(max*sizeof(char));
printf("%d %d\n",strlen(os),max*sizeof(char));
min=strlen(s1);
if (min > strlen(s2)) min=strlen(s2);
for (i=0; i < min; i++, c=c+2) {
os[c]=s1;
os[c+1]=s2;
}
for ( ; c < max; c++, i++) {
if (strlen(s1) > strlen(s2)) os[c]=s1;
if (strlen(s2) > strlen(s1)) os[c]=s2;
}
os[max]='\0';
printf("%s %d\n",os,strlen(os));
}
int main() {
char a[4]={'c','e','i','\0'};
char b[7]={'h','m','s','t','r','y','\0'};
merge_strings(a,b);
}
הערך של Max הוא 9, הסכום של אורך שרשרת a שהוא 3 ותרומה של 6 משרשרת b. אז אני מצפה שהשרשרת החדשה תהיה בת תשעה תווים (צריך בתכלס להגדיר לה 10 תווים).
תוכלו להסביר לי למה התוכנית מחזירה שהאורך של השרשרת החדשה os הוא 24 ולא 9 לאחר ה-malloc?
תודה רבה!
היי חברים,
לשם תרגול כתבתי פונקציה שמחברת בין מחרוזות. אבל משהו לא ברור לי:
void merge_strings(char s1[], char s2[]) {
char * os;
int min=0, i=0, c=0, max=0;
max=strlen(s1)+strlen(s2);
os=(char *) malloc(max*sizeof(char));
printf("%d %d\n",strlen(os),max*sizeof(char));
min=strlen(s1);
if (min > strlen(s2)) min=strlen(s2);
for (i=0; i < min; i++, c=c+2) {
os[c]=s1;
os[c+1]=s2;
}
for ( ; c < max; c++, i++) {
if (strlen(s1) > strlen(s2)) os[c]=s1;
if (strlen(s2) > strlen(s1)) os[c]=s2;
}
os[max]='\0';
printf("%s %d\n",os,strlen(os));
}
int main() {
char a[4]={'c','e','i','\0'};
char b[7]={'h','m','s','t','r','y','\0'};
merge_strings(a,b);
}
הערך של Max הוא 9, הסכום של אורך שרשרת a שהוא 3 ותרומה של 6 משרשרת b. אז אני מצפה שהשרשרת החדשה תהיה בת תשעה תווים (צריך בתכלס להגדיר לה 10 תווים).
תוכלו להסביר לי למה התוכנית מחזירה שהאורך של השרשרת החדשה os הוא 24 ולא 9 לאחר ה-malloc?
תודה רבה!