而是很簡單。主要關心的是tempPrefix
應該有足夠的空間用於前綴+原始字符。由於C字符串必須以空字符結尾,因此您的函數不應複製超過28個字符的前綴。它是30(緩衝區大小)-1(根標籤字符)-1(終止空字符)。幸運的是標準庫有strncpy
:
size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope.
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = root->label;
tempPrefix[buffer_size - 1] = '\0';
這也是值得的不是硬編碼在函數調用的緩衝區大小,從而使您可以增加其大小以最小的變化。
如果你的緩衝區不是一個確切的配合,需要一些更多的legwork。該方法與以前幾乎完全相同,但需要致電strchr
才能完成圖片。
size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope.
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = tempPrefix[buffer_size - 1] = '\0';
*strchr(tempPrefix, '\0') = root->label;
我們再次複製不超過28個字符。但是顯式地用NUL字節填充結尾。現在,由於strncpy
在NUL字節填充到count
的緩衝區中,以防被複制的字符串更短,實際上覆制前綴後的所有內容現在爲\0
。這就是爲什麼我馬上尊重strchr
的結果,保證指出一個有效的字符。第一個可用空間是確切的。
C [concatenate char array可能重複](http://stackoverflow.com/questions/2218290/concatenate-char-array-in-c) –
增加了一個解釋我的是如何不同於以前的問題 –
歡迎到堆棧溢出!請說明迄今爲止的研究/調試工作。請先閱讀[問]頁面。 –