【问题标题】:How can i interpret this : sprintf(var_ptr_char+strlen(var_ptr_char).... C code我该如何解释: sprintf(var_ptr_char+strlen(var_ptr_char).... C 代码
【发布时间】:2025-12-19 21:40:12
【问题描述】:

我该如何解释:var_ptr_char+strlen(var_ptr_char) 在下面的 C 代码中:

#define INT_CONSTANT 80
char var_ptr_char[1024];
strcat(var_ptr_char,"SOMETHING");
sprintf(var_ptr_char+strlen(var_ptr_char),":%d",INT_CONSTANT);

为了通过 snprintf 更改 sprintf,我将放置多少尺寸。

谢谢!

【问题讨论】:

  • 这是真正的代码吗?这是未定义的行为。如果您不知道,我建议您阅读一下c-strings 是什么以及strcat() 是如何工作的,以及sprintf() 是什么。
  • sprintf(var_ptr_char, "%s:%d", "SOMETHING", INT_CONSTANT); 而不是。

标签: c printf buffer strcat string.h


【解决方案1】:

sprintf 的第一个参数是一个char 指针(即char 缓冲区。)该函数将在该缓冲区“打印”并从指针指向的位置开始。

给指针加上N,表示指向第N个位置。因此,如果我们将strlen(var_ptr_char) 添加到var_ptr_char,我们实际上是在将指针传递给缓冲区的最后一个字符(假设它已经包含一个有效的字符串)。

snprintf 调用可能是这样的:

snprintf(var_ptr_char + strlen(var_ptr_char), 1024 - strlen(var_ptr_char) - 1, ":%d", INT_CONSTANT);

TL;DR:它将字符串附加到var_ptr_char中已存储字符串的末尾。

【讨论】:

  • 请注意,var_ptr_char 在这种情况下肯定不包含字符串。
  • 对,它可能不会。但是从代码摘录的外观(这似乎是一个不完整的行集合),我假设var_ptr_char 可能已经包含一个任意长度的有效字符串,在sprintf 调用之前以SOMETHING 结尾。跨度>