C++primer上的一道题目,麻烦大家帮忙看下

liu51301 2011-04-28 08:25:48

/*
* 编写程序从标准输入设备读入字符串,并把该串放在字符数组中。
* 描述你的程序如何处理可变长的输入。提供比你分配长度长的字
* 符串数据测试你的程序。
*/

#include <iostream>
#include <string>
#include <cstring>
#include <cstddef>
using namespace::std;

int main()
{
string str;

cout << "Enter string: " << endl;
cin >> str;

const size_t len = str.size();
char *new_str = new char[len + 1];

strncpy(new_str, str.c_str(), len);

new_str[len + 1] = '\0';
cout << new_str << endl;
delete [] new_str;

return 0;
}
我用VC6.0编译,编译连接都没问题,运行,输入字符串也能执行,但最后弹出Debug Error!
这是怎么回事,大家帮忙看下
...全文
96 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
self001 2011-04-29
  • 打赏
  • 举报
回复
C++ primer 我也想去买本,哎,中行网银有点问题,再坚持几天!
就想叫yoko 2011-04-29
  • 打赏
  • 举报
回复
提供比你分配长度长的字
* 符串数据测试你的程序。
purewqk 2011-04-29
  • 打赏
  • 举报
回复
new_str[len + 1] = '\0';应该改为new_str[len] = '\0';
kisskid 2011-04-28
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
#include <cstring>
#include <cstddef>
using namespace::std;

int main()
{
string str;

cout << "Enter string: " << endl;
cin >> str;

const size_t len = str.size();
char *new_str = new char[len + 1];//这里不必改

strncpy(new_str, str.c_str(), len);

new_str[len + 1] = '\0';//这里应该是new_str[len] = '\0';len+1的话就越界了
cout << new_str << endl;
delete [] new_str;

return 0;
}
無_1024 2011-04-28
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
#include <cstring>
#include <cstddef>
using namespace::std;

int main()
{
string str;
cout << "Enter string: " << endl;
cin >> str;
const size_t len = str.size();
char *new_str = new char[len + 2];//数组越界
strncpy(new_str, str.c_str(), len);
new_str[len + 1] = '\0';
cout << new_str << endl;
delete [] new_str;
return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧