char *mat(char *a,char *b)
{
while(*char!='
') while(*
{
while(*char!='
char *mat(char *a,char *b)
{
while(*char!='\0')
{
if(*a++!=*b++) return NULL;
}
return b;
}
求解, 其中 “ if(*a++!=*b++)” 的意思,,,
额 是whie( *b!=‘\0’)
写快了!
你單步調試就知道為甚麼了吧
看我理解的有没问题,,,就是只有在if(*a++=*b++)才不会返回NULL,,不知道对不对额
然后是,,各自加完后,再比较,,,只要出现(*a++!=*b++)就返回NULL;;是不是啊。。
意思是,,(*a++!=*b++)将两个中短的那个全比完,,只要出现不相同的就返回NULL;不知道理解正确么
那为什么调试后发现,,a比b长,,然后如果是return a 的话,,实际上是,输出a和b比较之后的 长度,,比如:a=“abcdeef”;b=“abc”。。。运行之后 得到的是:return a;结果是:deef
就你说的问题来看一下,如果像你那样,当a指向'd‘的时候,b指向’\0',已经不同,返回的是NULL,但是你是直接对传入的指针操作,所以你来打印a指向字符串,是从你a现在指向的地方一直到'\0'结束。我觉得你本意是这样调用:
{
while(*char!='\0')
{
if(*a++!=*b++) return NULL;
}
return b;
}
求解, 其中 “ if(*a++!=*b++)” 的意思,,,
11 个解决方案
#1
while(*char!='\0') 請問這段程式碼是否有錯???
#2
额 是whie( *b!=‘\0’)
写快了!
#3
“ if(*a++!=*b++)” 的意思,,,
首先,我们来看操作符的优先级,++高于*
其次,a,b是指针,
最后,先a++,但这时要注意,*a++表示取指针的内容,但这时取的是*a,,,取完之后a的指针指向+1
同理,b也一样;
判断*a是否等于*b,判断完成之后,不管是相等还是不相等,a,b指针都自加1
首先,我们来看操作符的优先级,++高于*
其次,a,b是指针,
最后,先a++,但这时要注意,*a++表示取指针的内容,但这时取的是*a,,,取完之后a的指针指向+1
同理,b也一样;
判断*a是否等于*b,判断完成之后,不管是相等还是不相等,a,b指针都自加1
#4
#include <stdio.h>
char *mat(char *a,char *b);
void main()
{
char *test;
char *_a = "a";
char *_b = "b";
test = mat(_a, _b);
printf("%s\n", test);
}
char *mat(char *a,char *b)
{
while(*b!='\0')
{
if(*a++!=*b++)
return NULL;
}
return b;
}
你單步調試就知道為甚麼了吧
#5
char *mat(char *a,char *b){
while(*a!='\0'){
if(*a++!=*b++) //*a!=*b? a=a+1,b=b+1
return NULL;
}
return b;
}
#6
看我理解的有没问题,,,就是只有在if(*a++=*b++)才不会返回NULL,,不知道对不对额
#7
然后是,,各自加完后,再比较,,,只要出现(*a++!=*b++)就返回NULL;;是不是啊。。
#8
意思是,,(*a++!=*b++)将两个中短的那个全比完,,只要出现不相同的就返回NULL;不知道理解正确么
#9
不能理解为把短的比较完,while循环只对a进行‘\0’末尾的判断,没有对b的判断,比如a长,b短,那么会一直比较下去,如果前面一直匹配,会和存储b之后的内存进行比较(未定义的结果)。
#10
不能理解为把短的比较完,while循环只对a进行‘\0’末尾的判断,没有对b的判断,比如a长,b短,那么会一直比较下去,如果前面一直匹配,会和存储b之后的内存进行比较(未定义的结果)。
char *mat(char *a,char *b){
while(*a!='\0'){
if(*a++!=*b++) //*a!=*b? a=a+1,b=b+1
return NULL;
}
return b;
}
那为什么调试后发现,,a比b长,,然后如果是return a 的话,,实际上是,输出a和b比较之后的 长度,,比如:a=“abcdeef”;b=“abc”。。。运行之后 得到的是:return a;结果是:deef
#11
不能理解为把短的比较完,while循环只对a进行‘\0’末尾的判断,没有对b的判断,比如a长,b短,那么会一直比较下去,如果前面一直匹配,会和存储b之后的内存进行比较(未定义的结果)。
char *mat(char *a,char *b){
while(*a!='\0'){
if(*a++!=*b++) //*a!=*b? a=a+1,b=b+1
return NULL;
}
return b;
}
那为什么调试后发现,,a比b长,,然后如果是return a 的话,,实际上是,输出a和b比较之后的 长度,,比如:a=“abcdeef”;b=“abc”。。。运行之后 得到的是:return a;结果是:deef
就你说的问题来看一下,如果像你那样,当a指向'd‘的时候,b指向’\0',已经不同,返回的是NULL,但是你是直接对传入的指针操作,所以你来打印a指向字符串,是从你a现在指向的地方一直到'\0'结束。我觉得你本意是这样调用:
char* p=mat(a,b); //p得到NULL
') while(*