将一段字符串复制到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. 此解决方案是否存在内存泄漏的风险?
  1. 你在 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];
...
  1. 不,它只是计算一个地址,该地址是从字符串开头算起的 2 个元素。如果愿意,您也可以将其表示为 &sourceSring[2]

  2. 没有。内存泄漏通常意味着堆分配内存(malloc、realloc、calloc)并且buffer[32]是在编译时(在堆栈上)分配的。

考虑使用 strncpy(或 memcpy)代替 snprintf