基于C++中sprintf的错误总结详解
2013-05-16 17:07
591 查看
sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误。
下面对sprintf 常出错误问题进行简单的总结:
1、缓冲区溢出:第一个参数的长度太短了,解决办法:将第一个参数的长度扩大。打印字符串时,尽量使用”%.ns”的形式指定最大字符数
char buf[5];
sprintf(buf, ":%d", 3246);
printf("buf is %s\n", buf);
将buf修改为char buf[6]
2、忘记第一个参数:原因用printf 用得用习惯了,偶尔会忘记
char buf[6];
sprintf(":%d", 3246);
printf("buf is %s\n", buf);
错误提示: error C2664: 'sprintf' : cannot convert parameter 2 from 'int' to 'const char *'
3、变参对应出问题:通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些参数,都提供了吗?
不要把一个整数对应一个”%s”
char buf[100];
int a=6;
sprintf(buf, ":%d,%s", 3246,a);
printf("buf is %s\n", buf);
温馨提示:a对应的应该是%d而不是%s
4、还有下面这种错误,我只能意会不知道怎么来描述。现在给出错误的代码和正确的代码的例子。大家自己看吧~~
错误的代码
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%s%s", a1, a2); //出现乱码,得出的结果并非我们所需要的
printf("buf is %s\n", buf);
正确的代码
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
printf("buf is %s\n", buf);
下面对sprintf 常出错误问题进行简单的总结:
1、缓冲区溢出:第一个参数的长度太短了,解决办法:将第一个参数的长度扩大。打印字符串时,尽量使用”%.ns”的形式指定最大字符数
char buf[5];
sprintf(buf, ":%d", 3246);
printf("buf is %s\n", buf);
将buf修改为char buf[6]
2、忘记第一个参数:原因用printf 用得用习惯了,偶尔会忘记
char buf[6];
sprintf(":%d", 3246);
printf("buf is %s\n", buf);
错误提示: error C2664: 'sprintf' : cannot convert parameter 2 from 'int' to 'const char *'
3、变参对应出问题:通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些参数,都提供了吗?
不要把一个整数对应一个”%s”
char buf[100];
int a=6;
sprintf(buf, ":%d,%s", 3246,a);
printf("buf is %s\n", buf);
温馨提示:a对应的应该是%d而不是%s
4、还有下面这种错误,我只能意会不知道怎么来描述。现在给出错误的代码和正确的代码的例子。大家自己看吧~~
错误的代码
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%s%s", a1, a2); //出现乱码,得出的结果并非我们所需要的
printf("buf is %s\n", buf);
正确的代码
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
printf("buf is %s\n", buf);
您可能感兴趣的文章:
相关文章推荐
- 基于C++中常见编译错误的总结详解
- 基于C++中常见编译错误的总结详解
- 基于C++中常见内存错误的总结
- 基于SpringMVC接受JSON参数详解及常见错误总结
- 基于C++中常见内存错误的总结
- 基于C++中常见内存错误的总结
- 基于C++中常见内存错误的总结
- 基于C++中常见内存错误的总结
- C++模板函数声明定义分离编译错误详解
- 错误总结:error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
- 基于链表的学生成绩管理系统——C++二进制文件读写string对象时出现的错误
- 【c++总结】sprintf用法
- c++模板函数声明定义分离编译错误详解
- C++中求组合数的各种方法总结详解
- C++ 概念总结(基于 C++11)
- 基于C++字符串替换函数的使用详解
- open cv+C++错误及经验总结(六)
- C/C++实战常见错误总结及注意事项【关注与Python的不同点】
- open cv+C++错误及经验总结(四)
- gcc命令_Linux gcc 命令用法详解:基于C/C++的编译器