sprintf连接参数:sprintf(a + b,“”)

时间:2013-06-13 21:12:51

标签: c++ c printf

将一些代码从sprintf移到snprintf - 在这个奇怪的事件中偶然发现:

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

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

4 个答案:

答案 0 :(得分:3)

是的,它附加了。 sprintf的第一个参数是它将写入结果的地址(指针)。

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

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

答案 1 :(得分:1)

  

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

是的,这就是它正在做的事情。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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