C++中关于返回空指针问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中关于返回空指针问题相关的知识,希望对你有一定的参考价值。

程序段执行以下任务:在字符串s中找到t的位置,若s中没有t,则否则返回NULL。
但我编好后运行,只能找到t的位置,若t不在s中,程序运行会出现内存错误~ Y Y Y Y ???

#include<iostream>
using namespace std;
char *strfind(char *s,char *t);
void main()

char *m,*n,a[100],b[10],*c;int k;
cout<<"请输入一个字符串"<<endl;
cin>>a;
cout<<"请输入查找字符串"<<endl;
cin>>b;
m=a,n=b;
c=strfind(m,n);k=strlen(m)-strlen(c)+1;
if(*c==NULL)
cout<<"没有该字符串"<<endl;
else cout<<"位置是"<<k<<endl;


char *strfind(char *s,char *t)

int i,j,leon;
for(i=0;i<=strlen(s)-strlen(t);i++)

leon=1;
for(j=0;j<strlen(t);j++)
if(s[i+j]!=t[j])

leon=0;
break;

if (leon==1)
return s+i;

return NULL;

报错是因为这句:
k=strlen(m)-strlen(c)+1;
如果返回了空指针,那么操作strlen(c)会报错

改为:
void main()

char *m,*n,a[100],b[10],*c;int k;
cout<<"请输入一个字符串"<<endl;
cin>>a;
cout<<"请输入查找字符串"<<endl;
cin>>b;
m=a,n=b;
c=strfind(m,n);
if(c!=NULL)//加上这句判断
k=strlen(m)-strlen(c)+1;
if(c==NULL)//这里将*c改为c
cout<<"没有该字符串"<<endl;
else cout<<"位置是"<<k<<endl;
参考技术A if(*c==NULL) -> if(c==NULL)

一图总结C++中关于指针的那些事

指向对象的指针。指向数据成员的指针,指向成员函数的指针;
数组即指针,数组的指针,指针数组;
指向函数的指针,指向类的成员函数的指针,指针作为函数參数,指针函数;
指针的指针,指向数组的指针;常指针。指向常对象的指针。
……

  大哥,这些都是什么鬼?。
  用以下一张图全概括。

用样例对比图示。有感觉,就用术语将概念大声地念出来,动员全部的感官參与,搞清楚这些,不是事。
  图例如以下:
技术分享








以上是关于C++中关于返回空指针问题的主要内容,如果未能解决你的问题,请参考以下文章

new会返回NULL空指针吗

带有空指针的 2D 指针数组 c++

c++异步回调函数引用传递空指针异常

C++ 空指针和野指针

C++ 空指针

cppcheck 取消引用空指针