- 論壇徽章:
- 0
|
#include <stdio.h>;
- int strcmp1(char *p,char *q)
- {
- while((*p != '\0')&&(*p == *q))
- {
- p++;
- q++;
- }
- if(*p >;= *q)
- {
- printf("p=%s,q=%s\n",*p,*q);
- return(1);
- }
- if(*p < *q)
- {
- printf("p=%s,q=%s\n",*p,*q);
- return(-1);
- }
- }
- int main()
- {
- char *s="abcdef";
- char *ss="abcde";
- int i=strcmp1(s,ss);
- printf("res=%d\n",i);
- return 0;
- }
復(fù)制代碼
上面的程序當(dāng)我不加 printf("p=%s,q=%s\n",*p,*q);可以正確執(zhí)行,加上時(shí)就報(bào)了段錯(cuò)誤。printf時(shí)需要讀內(nèi)存報(bào)錯(cuò)了,而比較時(shí)if(*p >;= *q)也需要讀內(nèi)存為什么沒報(bào)錯(cuò)? 按說*p這時(shí)的指向已經(jīng)超出了abcdef,為什么還能有正確的結(jié)果? |
|