发现用混合C的C++很难写出完全正确的程序
2009-05-04 18:50
260 查看
#include <stdio.h> #include <stdlib.h> #include <stdexcept> using namespace std; struct A { A() { printf("A::A()/n"); } ~A() { printf("A::~A()/n"); } }; struct G { G() { printf("G::G()/n"); } ~G() { printf("G::~G()/n"); } }; G g; int main(int argc, char* argv[]) { if (argc < 2) return 1; A a; char szbuf[32]; // 这里不管分配多少,总有可能不够, gcc3.4 环境下 ret 可能大于 32, 内容被截断 int ret = snprintf(szbuf, sizeof(szbuf), "arg1=%s", argv[1]); printf("ret=%d, szbuf=%s/n", ret, szbuf); if (ret >= sizeof(szbuf)) { perror("snprintf"); exit(1); // 如果是在深层函数调用,除了 exit(), 可用的就只剩下 throw // 实际上 exit 有陷阱,exit 只析析构全局对象, // C++ 规范说 exit 只析析构全局对象,不保证可以析构局部对象 } char* psz; // 发现一个法宝,可以 sprintf 动态申请的内存 // 但是也可能失败 ret = asprintf(&psz, "%.*s", 1000000000000, argv[1]); if (ret < 0) { perror("snprintf"); throw bad_alloc(); // 这里没有陷阱,但是如果没有外层 try-catch, 会 terminate } return 0; } 难啊,想简单,好像只能用 sstream 了
相关文章推荐
- 发现用混合C的C++很难写出完全正确的程序
- C++ 基础考考自己,看程序写出输出
- C++开发指导之使用编译期的契约:约束,在编译期发现程序的错误
- c++版本的高斯混合模型的源代码完全注释
- 如何写出一个让人很难发现的bug?
- c++ web编程:写出你的CGI程序
- 【笔试准备】写出程序输出结果C/C++
- 同一程序中混合调用C和C++代码
- 【转】c++ web编程:写出你的CGI程序
- android studio使用c++与c混合编译是遇到不太好发现的坑
- c++ web编程:写出你的CGI程序
- C/C++混合编译Makefile终于完全Debug了
- More Effective C++ Item M34:如何在同一程序中混合使用C++和C
- 如何在同一个程序中混合使用C++和C
- C++与C#混合生成.NET程序
- java调用c++写的dll 出现由于应该程序配置不正确,应用程序未能启动
- Windbg 内核态调试用户态程序然后下断点正确触发方法(亲自实现发现有效)
- 编写一个程序,从标准输入读入字符,并把它们写出在标准输出中。 所有非字母字符都完全按照它的输入形式输出,字母字符在输出前进行加密
- 二分查找的三个版本,据说90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。
- C++和QML混合的QT程序调试方法