簡體   English   中英

將字符串的一部分復制到 C 的緩沖區中

[英]Copy a section of a string into buffer in C

我有一個char buffer[ 32 ]; 並且有一個sourceString ,我不確定它是如何定義的,但我認為這並不重要。

sourceString"abcdefgh"

要將"cdef"復制到緩沖區中,我使用了snprintf

snprintf( buffer, 4 + 1, "%s", sourceString + 2 );

其中 4 是復制部分的大小,2 是該部分中第一個字符的索引

它有效,但我擔心一些導致問題的事情:

  1. 緩沖區大小大於字符串。 在那里放松一下會不會很痛苦?
  2. sourceString + 2不會修改sourceString或者是嗎? 我不明白這到底是如何工作的。
  3. 此解決方案是否存在 memory 泄漏的風險?
  1. 您在這里浪費了一點 memory (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];
...
  1. 不,它只是從字符串的開頭計算一個 2 個元素的地址。 如果您願意,也可以將其表示為&sourceSring[2]

  2. No. Memory 泄漏通常意味着堆分配的 memory(malloc、realloc、calloc)和buffer[32]在編譯時分配(在堆棧上)。

考慮使用strncpy (或memcpy )而不是snprintf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM