@איש-ימיני זה בגלל שהמקטע האחרון מכיל מידע שימושי פחות מ-128 תוים, ושאר התאים במערך מכילים שאריות מהמקטע הקודם. הפעולה:
result += segment;
מוסיפה את כל המקטע בגלל שאין תו null. אתה צריך להוסיף רק את size התוים האחרונים. אפשר להתחכם כך:
if (size < 128)
segment[size] = '\0';
result += segment;
למעשה זה קצת מטריד אותי שזה עבד בלי לקרוס, כי לא ברור לי מניין ידוע גודל המערך segment להיות 128, בכל האיטרציות הקודמות. הקוד הזה לא מניח את דעתי לגמרי. הפתרון הכי טוב זה להעתיק תמיד size תוים.
ובלאו הכי, נראה לי שהפעולה += מבצעת המרה לא מפורשת לאובייקט String. הכי טוב להגדיר מראש את הגודל המקסימלי של result, ולהשתמש בהעתקה ישירה ע"י memcpy.
// Globals
define MAX_LEN 1000
char result[MAX_LEN+1]; // save space for trailing null char
int resultSize = 0;
...
void doSomething(char * segment, int size) {
int charsToCopy;
charsToCopy = resultSize+size > MAX_LEN ? MAX_LEN-resultSize : size;
if (charsToCopy > 0) {
memcpy(result[resultSize], segment, charsToCopy);
resultSize += charsToCopy;
result[resultSize] = '\0'; // add trailing null char
}
}
ככה זה יותר בטוח