我正在尝试在c ++模块中使用snprintf,使用以下代码:
snprintf(err, "%s%s", "Fatal Error! ", err);
但是我收到“从'const char *'到'size_t'无效转换”的错误, 编译我的程序时,如何解决这个问题?感谢。
答案 0 :(得分:3)
snprintf
有以下原型:
int snprintf(char *str, size_t size, const char *format, ...)
参数2应该是char缓冲区的最大大小(即err
),这里有你的格式字符串。它被用作“更安全”的sprintf
,因为函数不会向缓冲区写入超过size
个字节,因此可以防止溢出。在这种情况下,我假设您只想使用标准sprintf
,它具有以下原型:
int sprintf(char *str, const char *format, ...);
答案 1 :(得分:1)
在C中,此函数按以下方式声明
int snprintf(char * restrict s, size_t n, const char * restrict format, ...);
如您所见,第二个参数的类型为size_t
,但在调用您使用的函数时,第二个参数的类型为const char *
snprintf(err, "%s%s", "Fatal Error! ", err);
所以你只是错误地使用了这个功能。
第二个参数指定您要在变量中读取的字符数。通常将n设置为s指向的字符数组的大小。
答案 2 :(得分:0)
为什么不阅读手册页?
根据手册http://linux.die.net/man/3/snprintf
,您错过了缓冲区err
的大小
修改强>
无论如何,用C ++ http://www.cplusplus.com/reference/sstream/stringstream/
执行此操作的更好方法