请帮我看下哪个地方越界了,程序报错 “遇到问题需要关闭”

rootcn 2008-09-18 10:09:53
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
char in[10];
char data[10];
char *temp = NULL;
while (true) {
cout << "input:" << endl;
if (temp == NULL || strlen(temp) < 1) {
gets(in);
temp = in;
} else {
//temp += 10;
}
if (strlen(in) == 1 && in[0] == '$') {
break;
}
int start, end;
printf("start:");
cin >> start;
printf("stop:");
cin >> end;
strncpy(data, temp, start);
data[start] = '\0';
cout << data << endl;
temp += start;
strncpy(data, temp, end - start);
data[end - start] = '\0';
cout << data << endl;
temp += end - start;
strcpy(data, temp);
cout << data << endl;
}
}
...全文
120 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudeshou82666 2008-09-18
  • 打赏
  • 举报
回复
我运行起来没有任何问题
rootcn 2008-09-18
  • 打赏
  • 举报
回复
gets() 输入的字符串长度超过 in 的定义才出现异常,
因此改用动态数组来处理

在 Release 模式下编译运行不会出错, Debug 下会报 "DAMAGE: after Normal block" 错误

这两种模式的区别可以参看
http://www.cppblog.com/kerlw/archive/2007/08/02/21700.html

谢谢各位.
rootcn 2008-09-18
  • 打赏
  • 举报
回复
忘了说意图,不好意思。

功能是这样的:将输入的字符串不断的分隔成3段,直到第3段为空继续输入,如果输入$就结束循环。


#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
char * in = new char[10]; // 输入字符串
char * data = new char[10]; // 临时字符串
char *temp = NULL; // 指向输入字符串的临时指针
while (true) {
cout << "input:" << endl;
if (temp == NULL || strlen(temp) < 1) { // 判断第3段是否为空
gets(in);
temp = in;
} else {
//temp += 10;
}
if (strlen(in) == 1 && in[0] == '$') { // 判断是否输入了$字符结束循环
break;
}
int start, end;
printf("start:");
cin >> start;
printf("stop:");
cin >> end;
strncpy(data, temp, start); // 第1段
data[start] = '\0';
cout << data << endl;
temp += start;
strncpy(data, temp, end - start); // 第2段
data[end - start] = '\0';
cout << data << endl;
temp += end - start;
strcpy(data, temp); // 第3段
cout << data << endl;
}
delete[] in;
in = NULL;
delete[] data;
data = NULL;
cout << "end" << endl;
}
hai040 2008-09-18
  • 打赏
  • 举报
回复
temp没在循环开始复原
把temp = in移到if外
jxcyly1985 2008-09-18
  • 打赏
  • 举报
回复
1放进in里面
4 start
1 end
strncpy(data, temp, -3);
不知道是不是这样
InfidelX 2008-09-18
  • 打赏
  • 举报
回复
楼主把程序的意图写出来,给点注释。
rootcn 2008-09-18
  • 打赏
  • 举报
回复
测试输入的数据为
this is my test
1
4
1
4
1
4
1
3
$

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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