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

Strcmp不工作,我似乎不明白原因--转换成ASCII代码可以使程序按预期工作

Strcmp是一个用于字符串比较的标准C函数,用于比较两个字符串是否相等。它的原理是逐个比较字符串中的字符,并返回一个整数值表示比较结果。

如果Strcmp不起作用,可能有以下几个原因:

  1. 字符串输入不正确:请确认你正确地传递了两个待比较的字符串作为参数给Strcmp函数。确保字符串的指针和长度是正确的。
  2. 字符串中包含特殊字符:Strcmp函数对特殊字符的处理可能会有问题。特殊字符可以是制表符、换行符等。请确保你的字符串不包含这些特殊字符。
  3. 字符编码不匹配:Strcmp函数是基于ASCII编码进行比较的。如果你的字符串使用的是其他编码(例如Unicode),可能会导致比较结果不准确。在比较之前,尝试将字符串转换为ASCII码。

在C语言中,可以使用一些函数将字符串转换为ASCII码。例如,可以使用ctype.h头文件中的函数将字符串转换为ASCII码。

以下是一个示例代码,展示了如何将字符串转换为ASCII码进行比较:

代码语言:txt
复制
#include <stdio.h>
#include <ctype.h>

int asciiStrcmp(const char* str1, const char* str2) {
    while (*str1 && *str2) {
        if (tolower(*str1) != tolower(*str2)) {
            return *str1 - *str2;
        }
        str1++;
        str2++;
    }
    return *str1 - *str2;
}

int main() {
    const char* str1 = "Hello";
    const char* str2 = "hello";

    int result = asciiStrcmp(str1, str2);

    if (result == 0) {
        printf("The strings are equal.\n");
    } else if (result < 0) {
        printf("String 1 is less than string 2.\n");
    } else {
        printf("String 1 is greater than string 2.\n");
    }

    return 0;
}

在这个示例中,我们自定义了一个asciiStrcmp函数,该函数将两个字符串转换为小写形式,然后逐个字符进行比较。如果字符不相等,就返回它们的ASCII码之差。这样可以确保字符串比较不受字符大小写的影响。

在云计算领域中,字符串比较常用于处理用户输入、认证和授权等场景。腾讯云提供了多种云服务来支持开发者构建安全、高效的应用程序,例如云服务器、云数据库、云存储等。你可以参考腾讯云的官方文档,了解更多关于这些产品的信息和使用方式:

  1. 云服务器:提供弹性计算能力,满足不同规模和需求的应用部署需求。
  2. 云数据库:提供高可靠、可扩展的数据库服务,支持多种数据库引擎,满足不同应用场景的需求。
  3. 云存储:提供安全可靠的对象存储服务,用于存储和处理大规模的非结构化数据。

希望这些信息对你有帮助!如果你有任何其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++字节流与二进制字符串相互转换(一个简单的明文加解密程序

本文介绍的是一个简单的将明文与二进制字符串相互转换的工具,尚未提供私有秘钥加密的功能,后续如有需要或网友有兴趣自行扩展其功能。...之所以写这个小工具,是因为在写一篇blog时,一些较为私密的信息不想那么明显的公之于众,简单的将其转换成对应的二进制字符串,这样一来,既增加了对方对加密后文字的兴趣,也避免了敏感信息直白表述带来的尴尬...2.应用场景 有了这个小工具,把我们的明文转换成对应的二进制字符串,其主要应用场景有: (1)屌丝程序猿向女神表白。...也别怕女神看不明白,懂你在乎你的人,她会去向你再三询问的,如果你的女神也是个程序媛,那就简单多了!使用01表白,是不是很有feel呢? (2)加密自己私密的信息。...下面给出自己总结的一个很好用的makefile模板,别人一般告诉他!

2.2K20

【C语言】字符与字符串---从入门到入土级详解

一.字符类型和字符数组(串)简介 1.ASCII 先来看看百度百科对ASCII的定义: 而ASCII的产生原因是: 在计算机中,所有的数据在存储和运算时都要使用二进制数表示...编译器一发现’A‘,就会将其转换成相应的代码值。因此字符数据的初始化中,单引号必不可少。...实际上,字符是以数值形式储存的,所以也可以使用数字代码值来赋值,如: char ch=65; 因为虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给ch没问题。...方法二:使用字母的ASCII码值特性,给大写字母+32转换成小写字母,给小写字母-32转换成大写字母。...方法三:使用位运算,将字符的 ASCII 码与 32(二进制为 0b00100000)进行位异或运算,即可将小写字母转换为大写字母,反之亦然。

10310
  • Python 在信号处理中的优势之二

    觉得最困扰的是 MathWorks 对他们工具箱的态度。他们似乎对待他们的客户,好像他们都很有钱。...strcmp() 为匹配返回 0,为匹配返回 1,这与一般C版本的 strcmp() 兼容,后者返回-1,0,1,具体取决于顺序排列的字符串。可以继续举例,但还是算了。...命名空间管理很糟糕 你想让你的控制系统从 Simulink 模型中获益(类似于保持 C 代码和独立的 .h 文件中的硬性常量)?这些控制系统必须进入MATLAB 基础工作区。...您可以使用调用函数的工作区来破解 sim() 命令,但这个有点棘手并且与 Simulink 的其他功能不兼容。...碰巧喜欢 Python 中的迭代器和生成器,并不在 MATLAB 中。 Matplotlib 就像 MATLAB 的绘图实用程序,但被改进了并且更易于使用。

    1.9K00

    【C语言】字符串函数strcpy&&strcat&&strcmp&&strstr的使⽤和模拟实现

    目标空间必须是修改的 代码: int main() { char arr1[20] = "xxxxxxxxx"; char arr2[] = {'a', 'b', 'c','\0'}; strcpy...⽬标空间必须修改。 字符串⾃⼰可不可以给⾃⼰追加?...strcmp比较字符串的大小,不是字符串的长度进行比较,而是逐个字符地比较两个字符串对应的每个字符的ASCII码值。(比较使用的是无符号字符值的ASCII码顺序。)...如果str1大于str2(ASCII码顺序),返回一个大于0的数。 如果str1小于str2,返回一个小于0的数。 strcmp()函数是C标准库string.h头文件中的函数。...感谢你的收看,如果文章有错误,可以指出,不胜感激,让我们一起学习交流,如果文章可以给你一个小小帮助,可以给博主点一个小小的赞

    42310

    算法工程师面试的理想与现实

    似乎他们编写了这个操作的原因是,有人编写(也许是复制粘贴)了一个哈希函数,其输入为一个字节数组,后来又将这个函数修改成:接受两个字节数组,并依次进行操作,因此这个哈希函数的接口为(byte[], byte...这个函数除了分配 byte[] 并将 long 填充到其中外,还可以反转 long 的字节(似乎这个函数本来的用途是将 long 值转换成有序的网络字节。)...在这家公司工作期间,发现只有一个解决方案似乎可以满足上述例子(如果这家公司规模更大,则可以满足所有条件,但是由于这家公司的规模有限,所以提高效率并没有那么重要,虽然付出了很多心血,但为公司带来的年收益并不会超过这辈子挣的钱...认为,只找到了这么一个例子的主要原因在于,很多人认为他们的工作就是让公司变得越来越好,所以能够直接带来高价值的解决方案根本不存在,因为系统就是这样设计的,想找到改进的方面并不容易。...在当代关于面试的讨论中,我们的做法通常被称为“降低标准”,但是不明白既然我们的工作所需的门槛很低(有时甚至没有)的时候,为什么我们要把门槛设得那么高。

    43420

    java scanner构造函数_使用Scanner作为构造函数的参数的Java

    参考链接: Java Scanner仪类 这是一个学校任务的问题,这就是为什么这样做的原因。...使用Scanner作为构造函数的参数的Java  总之,在主要方法(Scanner stdin = new Scanner(System.in);是行)中使用Stdin制作扫描仪,从程序运行时指定的txt...这种扫描仪预期工作为主,不过,需要用它在具有扫描仪作为参数的自定义类:  public PhDCandidate(Scanner stdin)  {  name = stdin.nextLine()...可以让程序工作,但这会很冒险,真的不明白发生了什么。怀疑错过了一个非常简单的概念,但我迷路了。任何帮助,将不胜感激。  ...+1  ”此时,Scanner的任何调用都将结束程序,不会抛出异常或错误。“究竟在什么时候?程序在哪里结束? –  +1  不认为你的程序实际终止。认为你的控制台正在等待输入。

    2.8K30

    Swift 单元测试入门

    编程语言中的单元测试是为了确保编写的代码预期工作。给定一个特定的输入,您希望代码带有一个特定的输出。...通过测试您的代码,能够给您当前的重构和发布建立信心,因为您将能够确保代码在成功运行您的测试套件后预期工作。 许多开发人员编写单元测试,因为他们认为这会花费太多时间,有可能错过最后期限。...还将分享帮助我开发更好、更稳定的应用程序的最佳实践。 什么是单元测试 单元测试是运行和验证一段代码(称为“单元”)以确保其预期运行并符合其设计的自动化测试。...(比如上面的扩展代码不小心被修改了),Xcode 将使用我们提供的描述显示失败: 单元测试失败,因为输入与预期输出匹配。...通过一些基本原则,您可以确保工作效率、保持专注并编写您的应用程序最需要的测试。 您的测试代码与您的应用程序代码一样重要 在深入探讨实用技巧之后,想介绍一种必要的心态。

    2.7K40

    PHP 在杀死 Python!

    如果你直挠头皮,搞不明白PHP为什么没有完蛋、甚至还没有奄奄一息,可能是由于你也许不明白编程、程序员、市场以及大众化等方面的几个问题,这些实际上与代码、函数或语法毫无关系。...提到PHP历史久远的原因是,这是这种语言不会消失的主要原因:它不仅嵌入到全球各地的新旧应用程序中,还嵌入到老老少少开发者的头脑中,他们使用PHP不是短短几年,而是整整几十年。...喜欢自己喜欢的方式缩进代码希望所用的编程语言在这方面碍手碍脚。反正,这是自己的代码,想自己的风格来编写,别人如何评价悉听尊便。...正是WordPress的插件架构(在这里使用“架构”这个词很宽泛),让普通人可以用PHP编写一小段代码来实现变更,而不必重写整个类,也不必成为软件工程师才能完成工作。...建议完全用Python编写的SaaS应用程序的这种场景很少见;考虑到Python在Web上的市场份额,似乎大多数应用程序架构师也这么做。他们只在各自适合的地方使用Python和PHP。

    52020

    JSON 这么可爱,让我们用千字短文吃透它吧!

    其实不然,JSON 是完全独立于任何语言之上的一个对象表示协议,甚至从个人的角度来说,它非常的 “JS”。...所以笔者推荐所有的程序员都把这篇文档通读一遍,恐怕这是大部分人唯一能完整读完的主流协议了(狗头)。所以啊,“可爱” 的 JSON 真不是标题党——试想这么短小的协议,怎不可谓可爱呢!...告诉对方,应该用 UTF-8 格式解码,但是对方不明白 UTF-8 是什么,只是不停的告诉他使用的是哪一个 Java 函数。...这个时候,如果一个浮点数在系统内部经过各种不同精度的转换之后,在转换成 JSON 时会有什么问题呢?...在实际操作中发现不少应用场景中把 object 的 K-V 也当作有序数据来操作了——这在很多自己使用代码简单拼接 JSON 串的场景中,出乎意料地很常见。

    2K110

    从XML文件乱码问题,探寻其背后的原理

    一直很想深入研究关于“编码”的原理,无奈水平有限,那些枯燥的理论(二进制,ASCII,Unicode,UTF-8,gb2312,ISO ...光这些就让看的两眼发黑了),实在看不下去,也很难真正搞懂搞明白...将用工作中遇到的一个“XML文件乱码”的简单问题,解决问题,分析其背后的原理。...如图所示: 写好之后,“ctrl+s”保存,然后使用IE浏览器打开该XML文件,验证该XML文档的规范及正确性。不料,居然解析出错了,如下: 这是咋回事呢?的XML文档定义的格式好像没问题啊。...但是这种方法推荐使用。因为我们在定义XML文档时候,为了文档的通用性,我们一般使用UTF-8编码。...所以,很多局限于使用某种IDE开发的程序员,其实并不明白这些知识及其背后的原理,但他们做开发起来一样很顺手。

    2.9K20

    python 之字符编码

    大家好,又见面了,是你们的朋友全栈君。...,最终都要加载到内存,程序保存到硬盘不同的国家用不同的编码格式,但是到内存中我们为了兼容万国(计算机可以运行任何国家的程序原因在于此),统一且固定使用unicode,这就是为何内存固定用unicode的原因...,你可能会说兼容万国可以用utf-8啊,可以,完全可以正常工作,之所以不用肯定是unicode比utf-8更高效啊(uicode固定用2个字节编码,utf-8则需要计算),但是unicode更浪费空间...解决乱码的方法 四 字符编码的类型 ASCII码: ASCII码是字符编码的鼻祖最早诞生于西方世界,只限于西方世界使用 Unicode码: 又称为万国编码,解决了ASCII码的缺陷,但是占用的内存相对较大...通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

    82220

    radare2逆向笔记

    准备 当前许多逆向的writeup倾向于使用IDA-Pro, 而且似乎都依赖于F5(反编译的快捷键), 直接 从二进制文件转成了可读的C代码....在Linux环境工作, 用到的几个工具如下: radare2工具集(用于静态分析) gdb(用于调试) peda(一个gdb的插件) 目标准备 初步打算是这一系列逆向文章使用IOLI的crackme文件来作为目标...看到main函数的汇编代码了, 就开始分析了, 不想像一些文章那样贴个图就说"显而易见, 这里的作用是XXX”, 毕竟也只是个新手, 虽然这只是一个超简单的crackme, 但因为是第一次, 还是把流程完整地走一遍...尤其是给变量/参数命名, 给函数/代码块命名, 这样会使得分析过程步步为营, 柳暗花明. 解法2: 修改程序 当我们能直接接触程序并且有修改权限时, 那么修改该二进制文件也是个快速通关的好办法!...刚刚bash脚本的输出告诉我们输入长为29字节的时候程序就崩溃了, 那么猜测29字节开始就覆盖了EIP, 但毕竟是猜测, 二进制的世界不接受模棱两的答案!

    66020

    程序员C语言快速上手——基础篇(四)

    a[5]表示的是数组的第6个元素,访问超出数组长度的元素会导致程序异常退出。...这就是为什么被称为宽字符的原因,它比char要宽,使用两个字节16位表示。...声明的同时,数组只能使用花括号初始化,而字符串可以使用双引号括起来的字面量初始化。 现在通过代码验证以上结论 1 // 请注意,以下代码会造成无法预知的错误。不可为!...[1]='b'; 11 str[2]='c'; 12 13 printf("%s",str); 以上代码规范的使用方式。...在这里插入图片描述 观察以上内存布局图,可知前三个元素分别是十六进制0x61、0x62、0x63,转换成十进制就是97、98、99,正好是a、b、c的ASCII码编号,剩余数组元素则默认都是0xcc,而它的十进制则是

    75350

    学习你的第一门编程语言

    大多数程序员——包括自己 ——通过阅读一本书尝试做一些东西出来,遇到挫折难题,然后再重读并继续尝试的事情,直到终于可以预期工作。...(遵循这些步骤,实际上你也能学习编程语言。) 此时你要做的是尽可能地创建最基本的程序,无论你学习的是什么编程语言。 还记得我们谈到过的“如何开发技术技能”吗?这正是此处的目标。...脱离这个困境并确保在知识上不会有欠缺的最好方法之一是,查看现有的代码,一行一行地,确保你能准确理解每一行和每一个声明在代码中是做什么用的。(即使你有时不知道原因,知道具体的过程依然是一种进步。)...到现在为止,你会编写Java代码代码工作在任意Java可运行的平台上,因为你大多数时间会使用标准库,并且只会输入和输出到屏幕或文件。...去看其他人的解决方案,不知道他们是如何想出这个解决方案的,也不知道他们的代码是如何工作的。他们用着一种万万没有想到的方式使用C ++代码

    64420

    学习你的第一门编程语言

    大多数程序员——包括自己 ——通过阅读一本书尝试做一些东西出来,遇到挫折难题,然后再重读并继续尝试的事情,直到终于可以预期工作。...(遵循这些步骤,实际上你也能学习编程语言。) 此时你要做的是尽可能地创建最基本的程序,无论你学习的是什么编程语言。 还记得我们谈到过的“如何开发技术技能”吗?这正是此处的目标。...脱离这个困境并确保在知识上不会有欠缺的最好方法之一是,查看现有的代码,一行一行地,确保你能准确理解每一行和每一个声明在代码中是做什么用的。(即使你有时不知道原因,知道具体的过程依然是一种进步。)...到现在为止,你会编写Java代码代码工作在任意Java可运行的平台上,因为你大多数时间会使用标准库,并且只会输入和输出到屏幕或文件。...去看其他人的解决方案,不知道他们是如何想出这个解决方案的,也不知道他们的代码是如何工作的。他们用着一种万万没有想到的方式使用C ++代码

    83160

    应用程序性能成熟度的六个级别

    一级:希望和祈祷 许多公司会迭代地构建业务应用程序,从概念验证开始,然后利用创造性的内部和外部人才将概念构建到一个工作原型中,然后将其扩展到产品中。 见过这样构建的系统能够提供非常强大的创新思想。...曾见过基于云的基础设施构建于基础之上,具有多租户代码库,没有监视集成。 结果如你所料,对所有人来说都是一段艰难的学习经历。...看到很多公司甚至承担起了支持的责任,每30秒在他们的web服务器实例上一次F5来确认他们还在工作。和利用海外资源,他们可以做这个24×7材料预算要求。 当它不工作的时候,它就会工作。...3级:APM 应用程序性能监视(APM)已经被接受了几十年。这个想法很简单,您需要监视技术的关键参数,以确保一切都预期运行,如果有任何东西运行速度低于预期,或根本没有运行,您将收到警报。...第6级:具有机器学习的事务跟踪 使用基于机器学习的人工智能,可以使用事务数据来确定问题,并从最细微的指标中预测所需的操作。 警报没有提供对最可能的原因和最有效的行动的分析。

    73320

    Android - NETD解读

    NETD 一、NETD解读 1.1、NETD的作用 Netd是Android系统中专门负责网络管理和控制的后台daemon程序,其功能主要分三大块: 设置防火墙(Firewall)、网络地址转换(NAT...Netd的工作流程和Vold类似[1],其工作可分成两部分: - Netd接收并处理来自Framework层中NetworkManagementService或NsdService的命令。...中 //其中,NETLINK_FORMAT_ASCII代表UEvent消息的内容为ASCII字符串 if ((mUeventHandler = setupSocket(&mUeventSock...strcmp(subsys, "xt_idletimer")) { //这个和idletimer有关,用于跟踪某个NIC的工作状态,即是“idle”还是“active”...用户可以自定义Chain,也修改Chain中的Rule。稍后将介绍不同Table中 默认Chain方面的知识。 Rule就是iptables工作的规则。

    2.1K10

    C语言(字符、字符串函数)2

    要特别注意的是,strcmp 函数比较两个字符串比较的不是字符串的长度,而是对应位置字符的ASCII码值。...可以看到,当对应位置字符的ASCII码值前者大于后者时,strcmp 函数返回了1;当小于时,strcmp 函数返回了-1;当等于时,strcmp 函数返回了0。...来看下面代码示例: 这个代码有没有什么问题呢?其实,上面的代码在VS中是没有任何问题的,但是在其他编译器中可能就会发生错误。...其中的原因strcmp 函数的返回值上,我们说当前面的字符串大于后面的字符串时返回一个正值,但这个正值可以是任意正值,而在VS上规定这个正值为1,但是在其他编译器上并不见得这个正值都为1。...,提取出18655404590、163和com,那我们就可以使用 strtok 函数来实现。

    7110
    领券