当前位置: 代码迷 >> C语言 >> 好急好急呀 又是null pointer assignment 的问题
  详细解决方案

好急好急呀 又是null pointer assignment 的问题

热度:788   发布时间:2007-04-24 18:52:58.0
好急好急呀 又是null pointer assignment 的问题
为什么程序又出现了null pointer assignment
我查了半天没看见数组越界呢
#include "stdio.h"
#include "string.h"
main()
{int n,m,i,j,k,p,q,s,k1,l,sig,num,r;
char a[200][200],t='\n',b[200][200],ch;
scanf("%d",&num);
ch=getchar();
ch=getchar();
do{s=0;
scanf("%d %d%c",&m,&n,t);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(" %c",&a[i][j]);
for(i=0;i<m;i++)
a[i][n]='\0';
scanf("%d",&k);
k1=0;
do{scanf("%s",b[k1]);
l=strlen(b[k1]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{if(a[i][j]==b[0][0])
{sig=1;
{if(l<=n-j)
{for(p=0,q=j;p<l;p++,q++)
if(a[i][q]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=j+1)
{for(p=0,q=j;p<l;p++,q--)
if(a[i][q]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1)
{for(p=0,q=i;p<l;p++,q--)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i)
{for(p=0,q=i;p<l;p++,q++)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=n-j&&l<=m-i)
for(p=0,q=i,r=j;p<l;p++,q++,r++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=j+1)
{for(p=0,r=j,q=i;p<l;p++,r--,q--)
if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i&&l<=j+1)
for(p=0,r=j,q=i;p<l;p++,r--,q++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=n-j)
for(p=0,r=j,q=i;p<l;p++,r++,q--)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
}
}
t: ;
k1++;
}while(k1<k);
s++;
}while(s<num);
}
搜索更多相关的解决方案: assignment  pointer  null  

----------------解决方案--------------------------------------------------------
scanf("%d %d%c",&m,&n,t);

代码风格实在难受.还用了goto.
弄好点再发上来.

看错误应该是null pointer assignment 空指针分配.

----------------解决方案--------------------------------------------------------
不是我不想弄好 而是不知道怎么弄了
就是那个goto 本来是想跳出循环的 但是用break 没跳出去
就只有用goto 一个空语句跳出了


----------------解决方案--------------------------------------------------------

设置一个标记跳出来.


----------------解决方案--------------------------------------------------------
在那里设置一个标记跳出来呢
----------------解决方案--------------------------------------------------------
你把程序整理一下
再加上程序目的
要不看你的程序可能要比写你的程序花更多时间
----------------解决方案--------------------------------------------------------
程序的目的是
分若干组数据输入字母表
{给定一个m*n的字母表
给定若干个单词
在字母表中寻找单词是否出现
可以从八个方向寻找
即向右,向左,向上,向下,左上,左下,右上,右下
找到即输出字母表中单词首字母对应的位置
若出现多次 只输出最左上角的那个位置
#include "stdio.h"
#include "string.h"
main()
{int n,m,i,j,k,p,q,s,k1,l,sig,num,r;
char a[200][200],b[200][200],ch;
scanf("%d",&num);/输入几组单词表/
ch=getchar();
ch=getchar();
s=0;
do{
scanf("%d %d",&m,&n);/单词表的行数列数/
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(" %c",&a[i][j]);/输入单词表中字母/

scanf("%d",&k);/被寻找单词的个数/
k1=0;
do{scanf("%s",b[k1]);/输入被寻找的单词/
l=strlen(b[k1]);
for(i=0;i<m;i++)/一个个从首字母进行寻找判断/
for(j=0;j<n;j++)
{if(a[i][j]==b[0][0])
{sig=1;/标志变量/
{if(l<=n-j) /当首字母相同的时候从八个方向进行寻找/
{for(p=0,q=j;p<l;p++,q++)
if(a[i][q]!=b[k1][p]) /比较每个方向上的各个字符是否与单词相同,不同时跳出循环/
{sig=0;
break;
}
}
else sig=0;
if(sig==1) /包含单词时时输出字母表中的对应的与被找单词相同的第一个字母的位置/
{printf("%d %d\n",i+1,j+1);
goto t; /想跳出循环但是用break跳不出整个,就用了goto/
}
}
{if(l<=j+1)
{for(p=0,q=j;p<l;p++,q--)
if(a[i][q]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1)
{for(p=0,q=i;p<l;p++,q--)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i)
{for(p=0,q=i;p<l;p++,q++)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=n-j&&l<=m-i)
for(p=0,q=i,r=j;p<l;p++,q++,r++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=j+1)
{for(p=0,r=j,q=i;p<l;p++,r--,q--)
if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i&&l<=j+1)
for(p=0,r=j,q=i;p<l;p++,r--,q++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=n-j)
for(p=0,r=j,q=i;p<l;p++,r++,q--)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
}
}
t: ;
k1++;
}while(k1<k);
s++;
}while(s<num);
}


----------------解决方案--------------------------------------------------------
不知道这样说行吗 修改程序是啥意思呢
要不我再修改修改 不过实在不知道怎么样改呢
有的地方输入是为了符合题目中规定的意思哈
比如两个getchar()是为了输入'\n'呢哈

因为是用机器判程序呢

----------------解决方案--------------------------------------------------------
漏断人初静
----------------解决方案--------------------------------------------------------
以下是引用Knocker在2007-4-25 8:44:46的发言:
漏断人初静

服了老K了
竟然在技术区灌水
而且你对的也太差了
----------------解决方案--------------------------------------------------------

  相关解决方案