我如何解释这个:sprintf(var#ptr#u char+;strlen(var#ptr#u char)…C代码

我如何解释这个:sprintf(var#ptr#u char+;strlen(var#ptr#u char)…C代码,c,printf,buffer,strcat,string.h,C,Printf,Buffer,Strcat,String.h,我如何解释这个:var\u ptr\u char+strlen(var\u ptr\u 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,我将设置多少大小 谢谢!sprintf

我如何解释这个:var\u ptr\u char+strlen(var\u ptr\u 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,我将设置多少大小


谢谢!

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\u ptr\u char
中已存储字符串的末尾,这是真实的代码吗?它是未定义的行为。如果您不知道,我建议您阅读
strcat()
的内容和工作方式,以及
sprintf()
sprintf(var\u ptr\u char),%s:%d,“SOMETHING”,INT_CONSTANT);
而不是。请注意,
var_ptr_char
在本例中肯定不包含字符串。对,它可能不包含字符串。但是从代码摘录的外观来看(这似乎是一个不完整的行集合),我假设
var\u ptr\u char
可能已经包含任意长度的有效字符串,在
sprintf
调用之前以
SOMETHING
结尾。