亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用strcmp函數比較兩個字符串,結果不正確啊?

用strcmp函數比較兩個字符串,結果不正確啊?

C
子衿沉夜 2019-03-08 11:07:52
#include <stdio.h>#include <string.h>main(){ char a[]={'a','b','c'}; char b[]={'a','b','c'}; int c=strcmp(a,b); printf("%d\n",c); getch();}兩個字符串數組完全一樣,按照strcmp函數應該輸出0但是輸出-1,用wintc編譯輸出-47,得不到正確結果。發現string.h中的函數不太靠譜啊,以前用過其中的isapha、isdigit等函數統計各種字符,發現函數的返回值根本不像描述的那樣。
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

strcmp的實現是這樣的,對兩個字符串,先比較第一個字符,如果不相等,返回差值。如果相等,繼續比較下一個字符,直到有不相等或遇到‘\0’時結束。

現在你把數組a和b傳入,因為前三個字符都相等,會越界繼續比較的。

如果你想比較兩個字符串,字符串是要用‘\0’結束的。
如果你只想比較前n個,可以使用strncmp,strncmp(a,b,3);

查看完整回答
反對 回復 2019-03-22
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

你這是在比較字符數組了吧 不是在比較字符串了
char a[] = "abc";
char b[] = "abc";應該這么定義
你之前定義的是
char a[]={'a','b','c'}; //char a[3] 是可以的 a[2] = 'c'
char b[]={'a','b','c'};// char a[4]也是可以的 a[3] = '\0'
不一樣的

查看完整回答
反對 回復 2019-03-22
?
森欄

TA貢獻1810條經驗 獲得超5個贊

你可以把字符串的初始化改成這樣:
char a[]="abc";
char b[]="abc";
那個getch();可以不要

查看完整回答
反對 回復 2019-03-22
  • 3 回答
  • 0 關注
  • 734 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號