c word search segmentation fault
[code=C/C++][/code]
在putty 下用 ./square < data1 运行 从data1中的字母矩阵和单词从找出所给单词,横向纵向斜向正反都行。
输入文件如下
S T E L B M T F E Y D E E P S R T C I A E E (后一个空格加转行符)
N N E L I T R L B D E T A R E M U N E T Y L
N O I T A N I M I R C N I F L E S S E N T A
A U I D E W A R R A N T N U P R U S S E R P
P G S G E A L P A P B A N P S A S S N M E A
C O N S I T U T I O N D E E C W S O O H P D
S V W D E L A N E E J A M E S M A D I S O N
A E D E S N E G R J C U L T N O H L T I R A
A R C E R R T R E E S B O N E E I D N N P R
S N J U D I C I A L A S S E C O R P E U D I
S M R A R A E B W B E S S M E O A U V P E M
O E O I A I L N O U C D O D S S E N N I G R
L N I D G Y T R C O M P E N S A T I O N N D
D T O Z E H P Y N D R L E E A O H S C O I B
I T P S U E T G O L U Z M M R B E H P I R T
E O I E A R R S U U I B H A Y L L M S T F A
R I N R E E E F U T L V Q U A R T E R I N G
S I D B S R R D I Y E N I G M I A N A T I R
S Q I S E B S C N S P E E C H R O T A E Y N
D L C M I L I T I A F L R N C A T S S P S E
R U T E D Y L E B I L C O H M L E T E S Y Y
L S T R T E W Z L I O S A E N S A E I Y A L
AMENDMENT
ASSEMBLY
BAIL
BEARARMS
CITIZEN
CIVIL
COMPENSATION
CONGRESS
CONSITUTION
CONVENTIONS
DELEGATED
DOUBLEJEOPARDY
DUEPROCESS
ENUMERATED
FREEDOM
GOVERNMENT
ILLEGAL
INDICT
INFRINGED
JAMESMADISON
JUDICIAL
LAWSUIT
LIBEL
LIBERTY
LIFE
MILITIA
MIRANDA
NECESSARY
PEACEABLY
PEERS
PETITION
POWER
PRESS
PROBABLECAUSE
PROPERTY
PUNISHMENTS
QUARTERING
RELIGION
RIGHTS
SEARCH
SECURITY
SEIZURE
SELFINCRIMINATION
SLANDER
SOLDIERS
SPEECH
SPEEDY
TRIAL
UNREASONABLE
WARRANT
WITNESS
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 50
#define S 20
int mark[M][M]={{0}};
int getData(char matr[][M],int *size);
int isit(char matr[][M],int r,int c, int rd, int cd,char buf[S]);
void printWord(char matr[][M],int *size);
void printWord(char matr[][M], int *size){
int i,j;
for(i=0;i<*size;i++){
for(j=0;j<*size;j++){
if (mark[i][j]==1)
printf("%c",matr[i][j]);
else
printf("%c",'0');
}
printf("%c",'\n');
}
}
int isit(char matr[][M],int r,int c, int rd, int cd,char buf[S])
{
int i,j;
int length=strlen(buf);
int step=0;
while(step<length){
if( c<0 || r<0 || c>length || r>length )
return 0;
else if (matr[r][c]!=buf[step])
return 0;
else{
r+=rd;
c+=cd;
step++;
printf("%d",step);
}
}
if (step==length){
mark[r][c]=1;
for(i=0;i<length-1;i-=rd){
for(j=0;j<length-1;j-=cd){
mark[i][j]=1;
}
}
}
return 1;
}
int getData(char matr[][M],int *size){
int i,j;
int c;
char ch;
while((ch=getchar())!='\n'){
(void)getchar();
matr[0][c++]= ch;
}
*size=c;
printf("%d",c);
for(i=1;i<*size;i++){
for(j=0;j<*size;j++){
matr[i][j]=getchar();
(void)getchar();
}
(void)getchar();
}
return *size;
}
int main()
{
int size;
int r,c;
int rd,cd;
char word[30];
char tab[M][M];
size=getData(tab,&size);
while(fgets(word,sizeof(word),stdin)!=NULL){
word[strlen(word)-1]='\0';
for(r=0;r<size;r++){
for(c=0;c<size;c++){
for(rd=-1;rd<=1;rd++){
for(cd=-1;cd<=1;cd++){
isit(tab,r,c,rd,cd,word);
}
}
}
}
}
printWord(tab,&size);
return 0;
}
不知道为什么,不会用gdb,求指导。
~
~
~
[解决办法]
不会用gdb,那就用vc好了。反正你这代码也没用到linux下什么东西。windows上build,debug下。
gdb,可以google “linux下gdb单步调试” 这篇文章。
[解决办法]
进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈