繁体   English   中英

sprintf串联参数:sprintf(a + b,“”)

[英]sprintf concatenated arguments: sprintf ( a+b, “”)

将一些代码从sprintf移到snprintf-偶然发现这种奇怪的情况:

sprintf(buf+strlen(buf), "ypasZ%c%c", iItem, val);

我不明白那里发生了什么: http : //www.cplusplus.com/reference/cstdio/sprintf/没有帮助。 是否将第一个参数(写入位置)的大小“增加”了? =>这是否意味着要写入的位置不是buf,但是buf的大小增加了? 还是将写块的位置预先设置为buf中现有字符串的位置,以便附加文本?

是的,它会追加。 sprintf的第一个参数是它将结果写入其中的地址(指针)。

如果buf是一个char数组,则编译器(在这种情况下)会将其视为指针。 加上它会增加地址。 将长度加上长度将指向字符串的当前结尾。

本质上,第一个参数表示address of string plus length of string that is there ,给出字符串末尾的地址,而不是开头,因此sprintf命令会将其结果写到当前字符串的末尾。

还是将写块的位置预先设置为buf中现有字符串的位置,以便附加文本?

是的,这就是它所做的。

第一个参数是指向sprintf应该在其中写入格式化字符串的区域的指针。 buf + strlen(buf)表示终止NULL字符( '\\0' )的地址。 sprintf只是从该NULL字符开始写入内存,从而继续buf的字符串。

这意味着buf可能定义为大小为n的数组char buf[n] 使用strlen(buf)是必要的,因为它随后将返回一个指向buf字符串末尾的指针,从而附加到该字符串的末尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM