從我已閱讀和理解的內容中,例如,當我們將字符串傳遞給函數時,在函數內部,我們不能使用sizeof(array)/ sizeof(array [0])來確定字符串的長度。所以我想知道它這個功能,字符追加到字符串的結尾是正確的:將字符追加到字符串末尾的函數
void append_ch_to_str(char *str, char ch)
{
int length = strlen(str);
str = (char *)realloc(str, (length + 1) * sizeof(char));
length = strlen(str);
*(str + length - 1) = '\0';
*(str + length - 2) = ch;
}
我認爲這是不正確的。 – BLUEPIXY
(1)字符串的長度不會改變'realloc()',所以第二個'strlen()'是多餘的。 (2)你分配的長度太小(關閉一個)。 (3)您正在使用新的更新語句寫入錯誤的位置。 (4)您沒有將分配內存的新位置傳回給調用代碼。其中,(1)最不嚴重;其他人對你的代碼的正確操作都很關鍵。 NB:'strlen()'計算字符串中的字節數直到空字節;這可能會或可能不會與分配給字符串的空間量有任何關係。 –
您可能還想反覆調用此函數來考慮潛在的二次方行爲。出於許多目的,更好的接口可能是將字符串附加到字符串,其中一個字符串是特殊情況。偶爾使用,目前的設計不會受到傷害。要一次添加一個字符需要更好的工作,它需要比'char *'或'char **'更復雜的字符串類型。 –