而是很简单。主要关心的是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) –
增加了一个解释我的是如何不同于以前的问题 –
欢迎到堆栈溢出!请说明迄今为止的研究/调试工作。请先阅读[问]页面。 –