
你的代码里有多处错误,C语言基本功还要加强。
我改了一下你的代码,你看一迹册看。
#include <stdio.h>蔽虚#include <string.h>
/*这个函数声明有两处错误
一处是没有返回结果,字符比较的差值没有地方返回;
一处是函数名称和标准库里的冲突,应该改成其他的名字,避免冲突*/
int mystrcmp(char*,char *)
int main(void)
{
char s1[100],s2[100] /*这里定义的变量s没什么用*/
char *p1,*p2 /*其实这两个指针p1和p2也没什么用,在调用mycompare时可以直接用s1和s2。当然用了也没什么问题*/
int result
p1=s1
p2=s2
printf("please input p1string:\n")
宏州燃 gets(s1)
printf("please input p2string:\n")
gets(s2)
result=mystrcmp(p1,p2) /*这个地方明显是希望比较函数有返回值的*/
printf("Compared result:%d",result) /*上面的result不用,用s这个没赋过值的变量明显是错误的*/
return 0
}
int mystrcmp(char*p1,char *p2) /*这里的定义和上面声明不一致,明显多了一个p*/
{
int i,j, p
for(i=0,j=0i<strlen(p1)||j<strlen(p2)i++,j++) /*这里的判断条件应该改成||, 用逗号运算符只会选取后面表达式的值作为判断依据,逻辑上是不对的*/
{
if(p1[i]==p2[j])
p=0
else
p=*(p1+i)-*(p2+j)
if(p!=0)
break
}
return p /*最后把p返回出去*/
}
app空指针异常闪退原因有对象为空或为null、出现异步线程问题和调用系统AIP问题。1、对象为空或明困为null:这可能是最常见的空指针异常原因,出现时需要在代码中检查所有涉及到的指针或对象是否为空或为null。清槐知
2、出现异步线程问题:如果异步线程没有正确处理对象和数据的情况,也可能导致空指针异常闪退。
3、调用系统API的问题:如果应用程序在调用系统API时没有正确处理回调,也可能导致空答消指针异常闪退。
1、指针的优点
是标识一块内存。电脑内存上的每一个字节都具有一个编号,称为地址(可以简单理解为指针),任何读写内存的指令都必须携带地址信息,否则电脑不知道读写那块内存。
不管程序是用什么语言写激郑的,要运行数据和代码必须驻留内存,CPU要执行指令必须有一个“指针”程序计数器指向内存的代码块厅册,如果某个指令要 *** 作内存数据,该指令必须携带额外的地址信息。
2、指针的缺点
指针可以 *** 作任何东西,所以指针很灵活、很强大,但也引入了复杂性。
扩展资料
1、指针利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于扮铅宏通过地址能找到所需的变量单元,可以说,地址指向该变量单元。
2、输出一串字符时,只需要知道它的第一个字符的地址,就可以将这个字符串输出,而第一个字符的地址,可以用指针储存。所以有n个字符串时,就可以用n个指针来储存。
3、为了保存一个数据在内存中的地址,就需要指针变量。因此指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)