c++ - strcmp参数为char**,也能正常运行?
迷茫
迷茫 2017-04-17 14:23:29
0
4
624

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;
}

程序为什么会正常运行?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
Peter_Zhu

int strcmp( const char *lhs, const char *rhs );
函数声明,c99 跟c11 略有差别,但不影响。

传入的就是指针,即使传入字符串变量,其实也还是一个地址。

比较的是从指针地址开始到空字符

刘奇

在vs2015上试过,报错:“char*类型的实参与const char类型的的形参不兼容”

PHPzhong

我没编译通过啊。提示 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而已,但实际上运行结果还是错误的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!