2013-12-21 69 views
0

這是分配內存以存儲兩個級聯字符串的正確方法嗎?爲兩個級聯字符串分配內存

size_t len1 = strlen(first); 
size_t len2 = strlen(second); 

char * s = malloc(len1 + len2 + 2); 

還是應該用malloc(len1 + len2 + 1)

+3

你只需要使用'len1 + len2 + 1';如果你使用'2',你將'浪費'一個完整的字節(但是內存管理器可能會分配多達15個額外的字節,所以你可能不會注意到)。 –

回答

3

讓我們看看有哪些需要存儲的字符串:

每個字符
  • 一個字節(假設非寬字符)
  • 一個尾隨NULL字節('\0',或者只是0

這使得它strlen(first) + strlen(second) + 1

char *s = malloc(len1 + len2 + 1); 
2

應該

char * s = malloc(len1 + len2 + 1); // 1 more space for \0 

NUL終止分配一個更大的空間(字節)。