मैं एक टेक्स्ट फ़ाइल भेज रहा हूं - क्लाइंट-सर्वर टेक्स्ट को प्रत्येक 512 बाइट्स में पैकेट में ब्रेक अप करें, लेकिन कुछ पैकेट में प्रत्येक आकार को प्राप्त करते समय सर्वर के पक्ष में अधिकतम आकार से कम टेक्स्ट होता है जिसे मैं malloc() को कॉल कर रहा हूं एक स्ट्रिंग फिर से बनाना, क्या यह एक बुरा अभ्यास है? क्या एक काम करने वाला बफर रखना बेहतर है जो अधिकतम लंबाई के लिए फिट हो सकता है और इसके मूल्यों को प्रतिलिपि बना रहा है, प्रतिलिपि बना रहा है और ओवरराइट कर रहा है?कॉलिंग malloc() और मुक्त() को रखना कितना बुरा है?
ठीक @ n.m। यहां कोड है, यह अगर();
if(nbytes==2) {
packet_size=unpack_short(short_buf);
printf("packet size is %d\n",packet_size);
receive_packet(i,packet_size,&buffer);
printf("packet=%s\n",buffer);
free(buffer);
}
//and here is receive_packet() function
int receive_packet(int fd,int p_len,char **string) {
*string = (char *)malloc(p_len-2); // 2 bytes for saving the length
char *i=*string;
int temp;
int total=0;
int remaining=p_len-2;
while(remaining>0) {
//printf("remaining=%d\n",remaining);
temp = recv(fd,*string,remaining,0);
total+=temp;
remaining=(p_len-2)-total;
(*string) += temp;
}
*string=i;
return 0;
}
कोड की एक पंक्ति हजारों टिप्पणियों के लायक है। –
@ एनएम। मैंने मुख्य पोस्ट – cap10ibrahim