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

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;
}
}
...全文
60 点赞 收藏 7
写回复
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
$
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告