我有一個char buffer[ 32 ];
并且有一個sourceString,我不確定它是如何定義的,但我認為這并不重要。
sourceString 是 "abcdefgh"
要將其復制"cdef"到緩沖區中,我使用snprintf:
snprintf( buffer, 4 1, "%s", sourceString 2 );
其中 4 是復制部分的大小,2 是該部分中第一個字符的索引
它有效,但我擔心一些會導致問題的事情:
- 緩沖區大小大于字串。在那里松懈會痛嗎?
sourceString 2不修改sourceString或者是嗎?我不明白這究竟是如何作業的。- 此解決方案是否存在記憶體泄漏風險?
uj5u.com熱心網友回復:
- 你在這里在 byes (32 - (4 1)) = 27 中浪費了一點記憶體。可以這樣做,而且對于像那里這樣的編譯時分配或運行時分配來說,這是一種相當常見的技術。但是,請使用 #define 代替神奇的 4、2 和 32 數字:
#define BUFFER_LEN 32
#define SOURCE_SUBSTR_LEN 4
#define SOURCE_OFFSET 2
char buffer[BUFFER_LEN];
...
不,它只是計算一個從字串開頭算起的 2 個元素的地址。您也可以隨意表達
&sourceSring[2]。不。記憶體泄漏通常意味著堆分配的記憶體(malloc、realloc、calloc)并
buffer[32]在編譯時(在堆疊上)分配。
考慮使用strncpy(或memcpy) 代替snprintf。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363034.html
