C++ primer 第五版 中文版 练习 12.24
题目:编写一个程序,从标准输入读取一个字符串,存入一个动态分配的字符数组中。描述你的程序如何处理变长输入。测试你的程序,
输入一个超出你分配的数组长度的字符串。
答:处理变长输入就想到了string,然后用string对象的成员函数 size()来获取长度申请动态内存空间。
代码如下:
#include <iostream>
#include <memory>
#include <string>
#pragma warning( disable : 4996)
using namespace std;
int main()
{
string str;
cout << "请输入一个字符串:";
cin >> str;
char *cp = new char[str.size()+1]; // 这地方一定要加1,不然delete [] cp 的时候会出错。
// 由于str.c_str() 返回一个以 '\0' 结尾的C 风格字符串,所以实际长度比 str.size()长。
strcpy(cp, str.c_str()); //这里调用了 string 对象的 c_str() 来返回一个C 风格字符串。
// _ASSERTE(_CrtCheckMemory()); //百度一下有个大神说可以用这来检查我下面说的的错误。
cout << cp << endl;
delete[] cp;
return 0;
}
在写这代码的过程中还出了个错如下:
HEAP CORRUPTION DETECTED:after Normal block (#158) at 0x0080B370. CRT detected that the application wrote to memory after end of heap buffer.