首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

strcmp inside if在函数内部不起作用

是因为strcmp函数用于比较两个字符串是否相等,返回值为0表示相等,非0表示不相等。在C语言中,字符串是以字符数组的形式存储的,而字符数组是以字符指针的形式传递给函数的。当我们在函数内部使用strcmp函数时,实际上是在比较两个字符指针的值,而不是比较字符串的内容。

在函数内部使用strcmp inside if时,由于函数内部的变量是局部变量,其作用域仅限于函数内部。当我们将字符串作为参数传递给函数时,实际上是将字符串的地址传递给函数,而不是字符串的内容。因此,在函数内部使用strcmp函数比较字符串时,实际上是在比较两个局部变量的地址,而不是比较字符串的内容,所以不起作用。

为了解决这个问题,我们可以使用strcpy函数将字符串内容复制到局部变量中,然后再使用strcmp函数进行比较。另外,还可以使用strcmp函数的返回值作为条件判断,例如:

代码语言:txt
复制
char str1[] = "Hello";
char str2[] = "World";

if (strcmp(str1, str2) == 0) {
    printf("两个字符串相等\n");
} else {
    printf("两个字符串不相等\n");
}

在上述代码中,我们先使用strcmp函数比较两个字符串的内容,然后将返回值与0进行比较,如果相等则输出"两个字符串相等",否则输出"两个字符串不相等"。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/virtual-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

前端ES6中rest剩余参数函数内部如何使用以及遇到的问题?

剩余参数是一个真正的数组,arguments 是一个类数组对象,不能直接使用数组的方法 arguments 不能在箭头函数中使用 函数内部的怎么使用剩余参数 剩余参数我们大都用在一些公共的封装里面...1、直接通过变量名取值、遍历 如果是直接在函数内部获取参数,或者遍历取出参数,我们直接用变量名就行了,注意不需要额外加 ... function restFunc(...args) { console.log...(args[0]) } restFunc(2) // 2 2、闭包函数中配合 call、bind 使用 这里函数内部用 call、bind 去改变 this 指向 function callFunc...,...展开参数是用在函数调用时(bind 要单独记下)。...3、闭包函数中配合 apply 使用 示例和上面的 call、bind 类似,不过注意 apply 接收的参数本来就是一个数组或类数组,所以这里并不需要额外用展开运算符去展开剩余参数: function

14630
  • C++核心准则T.69:模板内部,不要进行不受限制的非成员函数调用

    T.69: Inside a template, don't make an unqualified non-member function call unless you intend it to be...a customization point T.69:模板内部,不要进行不受限制的非成员函数调用,除非你希望它成为一个定制点 Reason(原因) Provide only intended flexibility...如果你想用依赖模板类型参数的值t调用你自己的帮助函数helper(t),将它放入::detail命名空间并用detail::helper(t)对调用进行限定;如果一个帮助函数处于t的类型可以被触发的命名空间...,不受限的调用会成为一个定制点;这会引起意外调用非约束函数模板等问题。...模板同一个命名空间中,如果存在一个同名非成员函数,标记模板中针对传递受影响类型变量的非成员函数的不受限调用。

    1.1K10

    C++之指针使用

    一 指针和数组对比   C++/C程序中,指针和数组不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。数组要么静态存储区被创建(如全局数组),要么栈上被创建。...但该语句企图修改常量字符串的内容而导致运行出错 p[0] = ‘X’; (2)内容复制和比较 // 数组… char a[] = "hello"; char b[10]; strcpy(b, a); // 不能用 b = a; if(strcmp...int len = strlen(a); char *p = (char *)malloc(sizeof(char)*(len+1)); strcpy(p,a); // 不要用 p = a; if(strcmp...但是“野指针”是很危险的,if语句对它不起作用。   “野指针”的成因主要有三种:   (1)指针变量没有被初始化。...对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数

    64810

    let 和 const 命令

    每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i。...这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。 # 不存在变量提升 var命令会发生“变量提升”现象,即变量可以声明之前使用,值为undefined。...; } } f(); }()); 上面代码 ES5 中运行,会得到“I am inside!”,因为if内声明的函数f会被提升到函数头部,实际运行的代码如下。...// 块级作用域内部函数声明语句,建议不要使用 { let a = 'secret'; function f() { return a; } } // 块级作用域内部,优先使用函数表达式...,所以添加新属性不起作用,严格模式时还会报错。

    96020

    14.10 Socket 套接字选择通信

    ,首先主函数中listen正常侦听套接字连接情况,当有新的套接字接入后则直接通过CreateThread函数开辟一个子线程,该子线程通过EstablishConnect函数挂在后台,挂入后台之前通过std...当读者需要发送数据时,只需要调用SendMessageConnect函数函数接收一个套接字链表,并接收需要操作的IP地址信息,以及需要发送的数据包,当有了这些信息后,函数内部会首先依次根据IP地址判断是否是我们所需要通信的...弹出一个套接字调用PopConnect该函数接收一个全局链表,以及一个字符串IP地址,其内部通过枚举链表的方式寻找IP地址,如果找到了则直接使用ptr.erase(it)方法将找到的套接字弹出链表,并以此实现关闭通信的目的...输出套接字元素时,通过调用ShowList函数实现,该函数内部首先通过循环枚举所有的套接字并依次Ping测试,如果发现存在掉线的套接字则直接剔除链表,如果没有掉线则客户端会反馈一个pong以表示自己还在...5000毫秒调用connect对服务端进行连接,如果没有连接成功则继续等待,如果连接成功了则直接进入内部死循环,循环体内根据不同的命令执行不同的返回信息,如下是客户端实现完整代码片段。

    23640

    LD_PRELOAD 后门 | bypass disable_functions

    只要劫持系统命令调用的一个函数就可以劫持函数任意执行其它函数从而绕过disable_functions 劫持命令调用函数的步骤: 在内部重写函数,将原有的函数覆盖 将原函数指针赋值给一个变量 触发重写的函数...vi是使用了strcmp函数strcmp_hook.c #include #include int strcmp(const char *s1, const...命令很明显就是执行了劫持函数strcmp, 但是使用strace which查看which命令的运行过程又看不到strcmp函数的执行记录, strace不显示strcmp的执行记录猜测可能是下面两个原因...(以后知道了的话再回来填坑) which的运行过程中执行的函数间接执行了strcmp函数 which的运行过程中开启了一个新进程执行其他命令,而这个命令就调用了strcmp 后门加固(使用alias)...我们可以通过 type -a 的命令判断给出的指令是内部指令还是外部指令 可以看到我们直接使用的pwd是一个内置函数,所以就不会加载外部共享库进而触发覆盖的puts()函数,但是

    85140

    ES6语法学习(let与var区别、块级作用域、const命令)

    ,所以全局只有一个变量i,每一次循环i的值都会发生改变,被赋给数组a的函数内部的console.log(i)中的i指向全局的i,因此所有数组a的成员中的i指向的都是同一个i,导致运行时输出的是最后一轮的...let i ="abc"; console.log(i); } 这表明了函数内部的变量i与循环变量i不在同一个作用域,而是各自有各自单独的作用域。...下面两种函数声明ES5中都是非法的,但是浏览器没有遵守这个规定,为了兼容以前的旧代码,还是支持了块级作用域中声明函数,因此下面两种情况实际上都能运行,并不会报错。...console.log('I am inside!')...,严格模式下还会报错 const foo = Object.freeze({}) //严格模式下,下面一行会报错,普通模式下不起作用 foo.pname = "老狗"

    1K00
    领券