strcmp 函数库中的声明:
int __cdecl strcmp (
const char * src,
const char * dst
)
#include<string.h>
#include<stdio.h>
int main( void )
{
char *s1 = "abcdkkkd";
char *s2 = "oefjeofjefo";
printf( "%d", strcmp( &s1, &s2 ) );
return 0;
}
程序为什么会正常运行?
int strcmp( const char *lhs, const char *rhs );
函數聲明,c99 跟c11 略有差別,但不影響。
傳入的就是指針,就算傳入字串變量,其實還是一個位址。
比較的是從指標位址開始到空字元
在vs2015上試過,報錯:「char*類型的實參與const char類型的形參不相容」
我沒編譯通過啊。提示
error: cannot convert 'const char**' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'
。但是樓主你,傳入的參數不是那個字串的位址啊!你傳入的是變數的位址啊。s1
和&s1
是不一樣的!Gcc編譯結果如下:
strcmp.c:9:5: warning: passing argument 1 of 'strcmp' from incompatible pointer type [enabled by default]
你那隻是編譯通過了,因為傳入的都是地址,所以只報了warning而已,但實際上運行結果還是錯的。