C ++:从'const char *'到'size_t'的转换无效?

时间:2014-04-19 10:00:51

标签: c++

我正在尝试在c ++模块中使用snprintf,使用以下代码:

snprintf(err, "%s%s", "Fatal Error! ", err);

但是我收到“从'const char *'到'size_t'无效转换”的错误,  编译我的程序时,如何解决这个问题?感谢。

3 个答案:

答案 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/

执行此操作的更好方法