数组出错问题

dbl36269927 2005-06-13 11:19:52
C程序,有一下错误 207 :数组太小 请问何原因,当小于100的时候就没这个错误,可编译通过。
另,如何把屏幕输出结果保存到文件D:\hello.txt中,请在原程序里修改,谢谢~
#include <stdio.h>
#include <stdlib.h>

char src[200][7] = {
{'H','M','B','G','S','T','Z'},
{'S','T','N','Z','H','M','B'},
{'M','L','B','G','J','S','T'},
{'H','L','B','A','Y','S','N'},
{'J','Y','S','N','L','B','G'},
{'H','L','B','G','Y','S','T'},
{'H','L','B','G','J','T','N'},
{'M','L','B','G','J','Y','S'},
{'J','Y','S','J','B','A','G'},
{'M','L','B','A','J','S','T'},
{'S','T','N','Z','H','L','A'},
{'H','M','A','G','Y','T','N'},
{'Y','S','T','N','H','M','B'},
{'J','S','T','N','H','B','A'},
{'H','M','L','G','S','N','Z'},
{'Y','S','T','N','H','M','A'},
{'M','B','A','G','J','Y','N'},
{'S','T','N','Z','H','M','G'},
{'J','S','T','N','M','L','G'},
{'H','B','A','G','Y','S','T'},
{'M','B','A','G','J','S','T'},
{'Y','S','N','Z','H','M','A'},
{'J','T','N','Z','M','L','B'},
{'Y','T','N','Z','H','L','A'},
{'H','M','B','G','S','N','Z'},
{'L','B','A','G','J','Y','S'},
{'J','Y','S','T','L','B','G'},
{'Y','T','N','Z','H','M','A'},
{'J','Y','T','N','B','A','G'},
{'M','L','B','G','J','Y','T'},
{'H','L','B','G','Y','S','Z'},
{'H','L','A','G','J','T','Z'},
{'H','M','B','A','S','N','Z'},
{'S','T','N','Z','H','M','A'},
{'J','Y','N','Z','H','B','G'},
{'J','T','N','Z','H','B','G'},
{'M','L','B','A','J','Y','S'},
{'H','M','A','G','Y','S','N'},
{'J','Y','T','Z','L','A','G'},
{'H','L','B','A','Y','S','Z'},
{'H','M','B','G','T','N','Z'},
{'J','Y','S','T','L','B','A'},
{'M','L','B','G','J','Y','N'},
{'H','L','A','G','Y','S','N'},
{'J','S','T','Z','H','A','G'},
{'J','S','N','Z','M','B','A'},
{'H','M','L','A','T','N','Z'},
{'H','M','A','G','J','T','Z'},
{'J','S','N','Z','M','L','B'},
{'H','M','L','G','T','N','Z'},
{'H','M','L','B','S','T','Z'},
{'H','M','L','A','T','N','Z'},
{'J','S','T','Z','M','L','G'},
{'H','M','L','B','S','N','Z'},
{'M','L','B','A','J','Y','T'},
{'H','L','A','G','Y','T','N'},
{'H','B','A','G','Y','T','N'},
{'Y','S','T','N','H','L','G'},
{'Y','S','T','N','H','M','L'},
{'H','L','A','G','Y','S','T'},
{'J','Y','T','Z','L','B','G'},
{'H','M','B','G','T','N','Z'},
{'H','M','A','G','J','T','N'},
{'H','L','B','A','J','N','Z'},
{'M','L','B','A','J','S','N'},
{'H','L','B','A','Y','T','N'},
{'J','Y','N','Z','M','L','G'},
{'Y','S','N','Z','H','M','G'},
{'L','B','A','G','J','Y','T'},
{'J','Y','S','J','L','A','G'},
{'H','L','B','G','J','T','Z'},
{'J','Y','N','Z','H','B','A'},
{'Y','S','T','Z','H','M','A'},
{'J','Y','N','Z','H','A','G'},
{'J','S','T','N','M','B','A'},
{'H','L','B','A','Y','S','T'},
{'M','B','A','G','J','S','Z'},
{'M','L','A','G','J','Y','S'},
{'J','Y','S','Z','B','A','G'},
{'H','L','B','A','J','T','Z'},
{'Y','S','N','Z','H','L','B'},
{'M','L','B','G','J','S','N'},
{'H','M','L','A','S','T','N'},
{'Y','T','N','Z','H','L','B'},
{'J','S','T','Z','H','B','A'},
{'H','L','B','G','J','N','Z'},
{'H','M','L','G','S','T','N'},
{'H','M','B','A','Y','T','Z'},
{'J','Y','N','Z','M','L','A'},
{'S','T','N','Z','H','L','B'},
{'H','L','A','G','J','N','Z'},
{'M','L','A','G','J','Y','Z'},
{'J','T','N','Z','M','L','G'},
{'J','Y','T','Z','B','A','G'},
{'J','Y','T','N','L','B','A'},
{'J','S','N','Z','H','B','G'},
{'J','S','T','Z','H','B','G'},
{'J','Y','T','N','L','B','G'},
{'H','M','L','B','T','N','Z'},
{'J','S','T','N','H','A','G'},
{'H','M','B','G','S','T','N'},
{'J','Y','T','N','M','B','G'},
{'H','M','L','B','S','T','N'},
{'J','T','N','Z','M','L','A'},
{'H','M','A','G','J','N','Z'},
{'H','M','L','A','S','T','Z'},
{'M','L','A','G','J','Y','T'},
{'M','L','B','A','J','S','Z'},
{'H','B','A','G','Y','S','N'},
{'M','B','A','G','J','S','N'},
{'Y','S','T','N','H','L','B'},
{'M','L','A','G','J','S','Z'},
{'J','Y','S','N','B','A','G'},
{'J','Y','S','N','M','B','G'},
{'J','Y','S','Z','L','B','G'},
{'H','M','B','A','S','T','Z'},
{'J','T','N','Z','B','A','M'},
{'M','B','A','G','J','Y','Z'},
{'Y','S','T','Z','H','M','B'},
{'J','Y','S','N','B','A','G'},
{'H','M','L','B','Y','T','Z'},
{'J','S','T','N','M','L','B'},
{'M','L','B','A','J','Y','N'},
{'L','B','A','G','J','Y','Z'},
{'H','B','A','G','J','T','Z'},
{'H','M','A','G','Y','S','Z'},
{'Y','S','T','Z','H','L','G'},
{'Y','S','T','Z','H','L','A'},
{'H','L','B','G','Y','S','N'},
{'J','S','N','Z','H','A','G'},
{'M','L','A','G','J','Y','N'},
{'J','Y','S','N','L','B','A'},
{'H','M','L','A','Y','T','Z'},
{'J','S','T','Z','M','L','A'},
{'H','M','B','A','T','N','Z'},
{'Y','S','T','N','H','M','G'},
{'M','L','B','G','J','Y','Z'},
{'Y','S','T','Z','H','M','G'},
{'J','Y','S','T','B','A','G'},
{'H','L','A','G','Y','S','Z'},
{'H','M','L','B','T','N','Z'},
{'J','Y','S','T','M','B','G'},
{'H','M','L','A','S','N','Z'},
{'J','S','N','Z','M','L','G'},
{'M','L','B','G','J','S','Z'},
{'M','L','A','G','J','S','T'},
{'L','B','A','G','J','S','T'},
{'J','S','N','Z','M','L','A'},
{'J','Y','S','Z','M','B','G'},
{'H','M','L','G','S','T','Z'},
{'M','L','B','A','J','Y','Z'},
{'M','L','A','G','J','S','N'},
{'H','L','A','G','J','T','N'},
{'L','B','A','G','J','S','Z'},
{'H','B','A','G','J','T','N'},
{'M','B','A','G','J','Y','T'},
{'S','T','N','Z','H','M','L'},
{'J','Y','T','Z','M','B','G'},
{'H','B','A','G','Y','S','Z'},
{'J','Y','N','Z','M','B','A'},
{'Y','T','N','Z','H','L','G'},
{'J','Y','T','Z','B','A','G'},
{'J','T','N','Z','H','B','A'},
{'Y','S','N','Z','H','L','G'},
{'Y','S','T','Z','H','M','L'},
{'H','M','A','G','Y','S','T'},
{'J','Y','S','T','L','B','A'},
{'S','T','N','Z','H','L','G'},
{'J','Y','T','N','L','A','G'},
{'H','L','B','A','J','T','N'},
{'H','M','L','G','T','N','Z'},
{'J','Y','T','N','B','A','G'},
{'J','T','N','Z','H','A','G'},
{'Y','S','N','Z','H','M','B'},
{'H','M','B','A','T','N','Z'},
{'Y','S','N','Z','H','M','L'},
{'Y','S','T','N','H','L','A'},
{'L','B','A','G','J','Y','N'},
{'H','M','L','G','Y','T','Z'},
{'L','B','A','G','J','S','N'},
{'H','M','B','A','S','T','N'},
{'Y','T','N','Z','H','M','G'},
{'Y','S','N','Z','H','L','A'},
{'J','S','T','Z','M','B','A'},
{'J','Y','T','Z','L','B','A'},
{'J','Y','S','T','B','A','G'},
{'J','Y','S','N','L','A','G'},
{'J','S','N','Z','H','B','A'},
{'J','S','T','N','H','B','G'},
{'J','S','T','N','M','L','A'},
{'J','S','T','Z','M','L','B'},
{'Y','T','N','Z','H','M','L'},
{'H','B','A','G','J','N','Z'},
{'J','Y','S','T','L','A','G'},
{'H','L','B','G','Y','T','N'},
{'M','B','A','G','J','Y','S'},
{'J','Y','N','Z','M','L','B'},
{'Y','S','T','Z','H','L','B'},
{'H','M','B','G','Y','T','Z'},
{'Y','T','N','Z','H','M','B'}
};

char change[200][200][7];

void print_array(char *s, int line, int column)
{
int i,j = 1;

for( i = 0; i < line * column; i++){
if( ! ( i % column)) printf("%2d: ", j++);
printf("%c ", *(s+i));
if( ! ( ( i + 1) % column))
printf("\n");
}

}
续后面
...全文
194 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2005-06-15
  • 打赏
  • 举报
回复
另,如何把屏幕输出结果保存到文件D:\hello.txt


运用输出重定向:


编译后的file.exe


运行: file.exe>D:\hello.txt
nicknide 2005-06-15
  • 打赏
  • 举报
回复
......
什么系统?才64K的默认栈?
「已注销」 2005-06-14
  • 打赏
  • 举报
回复
在我这里测试。。没问题。。
MagicCarmack 2005-06-14
  • 打赏
  • 举报
回复
可能是WIN TC的问题吧
MagicCarmack 2005-06-14
  • 打赏
  • 举报
回复
没有错误啊


DEV CPP下通过并能正确执行
darkstar21cn 2005-06-14
  • 打赏
  • 举报
回复
不是编译器的问题,你的这个数组char change[200][200][7];200*200*7/1024至少有250K,而一般系统默认的栈也就64K,没法分配这个大的空间,所以一般在用到比较大(本人一般使超过256bytes的时候就使用堆内存了)的内存空间时,我们都是使用的堆内存,也就是使用malloc(new)来分配空间。
improgrammer 2005-06-14
  • 打赏
  • 举报
回复
tc的寻址方式是否16位?下面一句
char change[200][200][7];
足足要求在栈上分配200*200*7约280KB,在16位模式下,这足足跨了4个段,而数组是不允许跨段的。

为什么还用tc这类老旧工具?是否要开发dos程序?
开发dos程序的话,不能这么豪爽地分配内存,需要精打细算。
xinde 2005-06-14
  • 打赏
  • 举报
回复
应该是编译器的问题,不支持,可以换个编译环境
clear117 2005-06-14
  • 打赏
  • 举报
回复
试过了 编译通过 执行 test.exe > a.txt 运行正常,文件a.txt正常


是不是与编译器有关

tfq 2005-06-14
  • 打赏
  • 举报
回复
不是数组太小,是太大。win-tc报了个错误的报告。
tc下是报数组太大。
可能是编译模式的原因(64k限制),tc和win-tc不能分配那么大的数组吧。
建议以文件形式存取,不要在内存分配。

zhousqy 2005-06-14
  • 打赏
  • 举报
回复
没什么问题.
真相重于对错 2005-06-14
  • 打赏
  • 举报
回复
输出到txt
可以使用

you.exe>d:\1.txt
方式
sky911911 2005-06-14
  • 打赏
  • 举报
回复
楼上的程序实现的是什么功能?。。我运行了 死机了!!!!!!!!!!!1
foochow 2005-06-14
  • 打赏
  • 举报
回复
楼主编译器的问题-_-
dbl36269927 2005-06-13
  • 打赏
  • 举报
回复
编译环境 win2000 win-tc1.9
dbl36269927 2005-06-13
  • 打赏
  • 举报
回复
续上面
void print_three_array(char *s, int t, int line, int column)
{
int i, j, k;

for( j = 0; j < line; j++){
printf("%2d: ", j+1);
for( i = 0; i < t; i++){
for( k = 0; k < column; k++){
printf("%c ",
*(s + ( i * line * column) + ( j * column ) + k));
}
printf(" ");
}
printf("\n");
}
}


void do_change(char* src, int line, int column,
char* dst, int offset, int change_time)
{
int i,j,k;

printf("do_change: line %d, column %d, offset %d, change_time %d\n",
line, column, offset, change_time);

for( i = 0; i < change_time; i++){
for( j = 0; j < line; j++){
for( k = 0; k < column; k++){
*(dst + (i*line*column) + ( ((j+(offset * (i+1)))%line) * column) + k) = *(src + j * column + k);
}
}
}

}

void search(char* sfor, char* dst, int t, int line, int column)
{
char *s = sfor;
char hit[200];
int i = 0,j = 0,k = 0;
char sc;

for( j = 0; j < sizeof(hit)/sizeof(char); j++)
hit[j] = 0;

while( (sc = (*s++)) != '\0'){
if( sc == ' ' || sc == '\n') continue;


for(j = 0; j < line; j++){
for( k = 0; k < column; k++){
if( *(dst + ( i * line * column) + (j * column) + k) == sc){

hit[j]++;
}
}
}
i++;
}

for(j = 0; j < line; j++){
if(hit[j] == 0){
printf("%s: line %d no char found :", sfor, j+1);
for( i = 0; i < t; i++){
printf(" ");
for( k = 0; k < column; k++){
printf(" %c", *(dst+(i*line*column)+j*column+k));
}
}
printf("\n");
}

if(hit[j] >= (t-1)){
printf("%s: line %d found all char:", sfor, j+1);
for( i = 0; i < t; i++){
printf(" ");
for( k = 0; k < column; k++){
printf(" %c", *(dst+(i*line*column)+j*column+k));
}
}
printf("\n");
}
}

}


int main(int argc, char** argv)
{
int offset;
int change_time;
char c;
char *tmp;
char search_char[200];

printf("The original charset is:\n");
print_array( src[0], 200, 7);

printf("Please enter offset(M): ");
scanf("%d", &offset);
getchar();
printf("Please enter the chars for search: ");
fgets(search_char, sizeof(search_char), stdin);

change_time = 0;
tmp = search_char;
while( *tmp++ != '\0'){
c = *tmp;
if( c == ' ' || c == '\n' || c == ','){
*tmp = ' ';
continue;
}
change_time ++;
}
change_time++;

if( offset * (change_time) > 200){
printf("offset or search chars is too big/more\n");
exit(0);
}

do_change(src[0], 200, 7, change[0][0], offset, change_time);

print_three_array(change[0][0], change_time, 200, 7);

search(search_char, change[0][0], change_time, 200, 7);

return 0;
getch();

}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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