c语言为啥打印的字符串一样,strcmp比较起来却不一样?

作者&投稿:冯刷 (若有异议请与网页底部的电邮联系)
~ 在 C 语言中,字符串是以 NULL 字符('\0') 结尾的字符数组。当我们使用 printf 函数打印一个字符串时,它会一直打印到遇到 NULL 字符为止,而在 strcmp 函数比较两个字符串时,它会一直比较到遇到 NULL 字符或两个字符串不相等的字符为止。
因此,当两个字符串打印出来看起来一样,但比较结果却不一样,很可能是因为两个字符串在某个位置上不一样,导致 strcmp 函数比较时返回不相等的结果。在这种情况下,可以使用调试工具或者输出每个字符的 ASCII 码值来找出这个位置。

在C语言中,字符串是使用以 null 字符 '\0' 结尾的字符数组来表示的。例如,字符串 "hello" 在内存中会被表示为包含字符 'h'、'e'、'l'、'l'、'o' 和 null 字符 '\0' 的字符数组。
当使用printf函数输出字符串时,它会遍历整个字符数组,直到遇到 null 字符 '\0',然后停止输出。因此,如果两个字符串包含相同的字符序列(包括 null 字符 '\0'),它们在被printf函数输出时会看起来一样。
但是,当使用strcmp函数比较两个字符串时,它会逐个字符地比较两个字符串中的字符,直到遇到不同的字符或 null 字符 '\0'。如果两个字符串包含相同的字符序列,但它们的长度不同,或者它们在某个位置上包含不同的字符,那么strcmp函数将返回一个非零值,表示这两个字符串不相等。
因此,如果两个看起来一样的字符串在使用strcmp函数比较时返回不同的结果,那么很可能是它们的长度不同或者它们在某个位置上包含不同的字符。


c语言为啥打印的字符串一样,strcmp比较起来却不一样?
在 C 语言中,字符串是以 NULL 字符('\\0') 结尾的字符数组。当我们使用 printf 函数打印一个字符串时,它会一直打印到遇到 NULL 字符为止,而在 strcmp 函数比较两个字符串时,它会一直比较到遇到 NULL 字符或两个字符串不相等的字符为止。因此,当两个字符串打印出来看起来一样,但比较结果却不...

C语言字符串打印出现特殊字符是怎么回事?请问如何解决这个问题?_百度...
这是由于代码页不同的缘故,要把代码页切换到英文格式,才能显示扩展ASCII码,否则,编译系统会把它当作,汉字来显示,就出现了右图中的“怪汉字”。但是,这种情况下却是不能显示汉字的(在贴出的程序中特意“企图”显示一行中文信息,观察它的显示情况,然后把system("chcp 437 > nul");一行注释或...

c语言打印字符串乱码,应该怎么办?
1、字符串数组各字符单个赋值的话,在每串最后一个字符之后添加 '\\0',表示串结束了,输入时就没有多余的乱码了,因为gets()或scanf() 的%s都是主动在串结束后添加了 '\\0'的。\\x0d\\x0a2、字符串使用前请使用清空语句把垃圾内存清理成'\\0',也就是0x00(0):\\x0d\\x0amemset(str2, 0x0...

c语言输入ctrl+z之后打印出一个问号
原因是你的下标出了问题(以下都以输入kan为例)我首先做的是在reverse前面用strlen把line的长度打印出来,结果当输入kan的时候,打印出来的长度是5,你期望的应该是4吧,前3个是kan,最后一个换行。你希望getline返回4,于是在reverse中减去2,正好指向kan的最后一个字符。这是对的,问题在getline中。...

c语言中为什么不是输入一个字符,打印出一个字符?
按回车键之后才会读入内存中,你所看到的叫做控台,你如果没有按回车它就不会进入 char ch的地址中。你想想输入时,退格键怎么能删除已输入内容的?因为还没被程序读取到

C语言,为什么输出字符的时候会多几个字符?
多出来的是换行符.你可以改成 while(scanf("%c",&str) && str!='\\n')这样遇到换行符结束程序.否则 读到换行符并输出是正常的.或者可以限制输出只有大写的时候 if(str>='A' && str<='Z') printf(...)

打印字符指针地址变成字符串原理是什么?
打印字符指针地址变成字符串的原理是基于C语言中指针变量的特性。C语言中的指针变量可以引用内存中任意地址,指针变量可以把内存地址视为字符串,因此可以把字符串打印出来。当使用指针变量时,可以通过把字符串分配到某个内存地址来实现。此时指针变量将指向该内存地址,且可以通过访问该指针变量来获取字符串...

c语言中printf打印字符串的问题
printf("%s", "Hello world");printf() 函数 有2 个 实际参数,第2个参数: "Hello world" 是字符串常量,存放在某内存区域。第一个参数是格式,其中 %s 是输出格式转换。执行时 要把 第2个参数 按 %s 的方式 作 格式转换,然后输出。--- printf("Hello world");printf() 函数 ...

C语言 字符串的输出,为什么输出那么多‘烫’呢?
输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。而定义的字符数组空间不够,所以就占用了那部分不属于自己的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了。即是说在最后没有字符串结束标志'\\0'。

在C语言中如何实现用键盘输入一个字符串,并打印出来?
在C语言中输入字符串后然后打印出来的编程方法如下:1.首先需要先定义一个存放字符串的数组空间,如给字符串100个数组空间。2.接着使用gets()函数来获取键盘输入的字符串。一般格式为gets(定义的字符数组名)。3.然后再使用puts()函数来输出之前输入的字符串内容。一般格式puts(定义的字符数组名)。4....

井研县17693119832: @C语言大神:我的代码【求素数】为什么打印出很多一样的数?求修改 -
姓种昊方: 第一个错误,报错说printf("%s",adverse(str));这里错了,因为自定义函数adverse的返回值是void类型的,怎么能输出.其实adverse函数的功能就是将字符串倒序,所以这时候str已经倒序,我们只要输出str就可以了.这里应该改为printf("%s...

井研县17693119832: C语言中判断两个字符串是否相同的方法 -
姓种昊方: C语言提供了几个标准库函数,可以比较两个字符串是否相同.以下是用strcmp()函数比较字符串的一个例子: #include <stdio. h> #include <string. h> void main (void); void main(void) { char* str_1 = "abc" ; char * str_2 = "abc" ; char* str_...

井研县17693119832: C语言问题,str是一个指针的名字,为什么用%s输出,str前面不加*就能直接打印出hello world,加了*却不行 -
姓种昊方: str是指针变量,其中存放的是在常量区存放的字符串首地址 用%s输出时,printf语句要求提供字符串首地址,给出str变量存放的首地址即可*str是str指向的单元,即字符串第1个字符的内容'h',类型是char,并不是地址(指针)类型

井研县17693119832: c语言》为何这个字符串的倒着打印的,指针这个不是很懂,求解释 -
姓种昊方: 这里倒着打印的原因是由于x中的递归调用 首先需要理解递归调用,他在下一次调用结束的时候是返回到本次调用的地方的.比如这里首先在主函数中调用x(a);那么在函数中判断后继续调用x(a+1),这使得传递的指针后移了一位,然后经此往复,到的字符串的末尾时由于满足!*a的条件,所以就返回了,返回到上一次调用的地方之后,继续往下执行,打印语句,而此时指针指向了字符串的最后一个位置,所以打印了!,之后继续返回到上次调用的地方,即指针指向倒数第二个位置的时候,依次类推倒序打印.打印完毕后返回到主函数main中,执行下一个打印语句,a+4的位置即是a,从而又打印了一个a.

井研县17693119832: 用指针char *str;保存字符串什么原理? -
姓种昊方: 这个呢,要从指针的实现和string格式的输出规则说起了.没错,str指针指向的是H,他保存的就是H的地址,把字符串赋值给他,他就会按照指定的地址“顺序的”把“hello world”写入内存,比如str指向了内存9,那么赋值之后9就是H,然后依次10是e……注意!!!在字符串的末尾,也就是字母d的后面,还有一个字符'/0',他的值是0 .当系统取字符串的时候,就从9开始读,读到了'/0'之后就停下来,然后把一串返回给你的调用接口.是硬性规定的,比如你把内存13(字母o)赋值为0,然后再读取str,结果就是"Hell".现在明白了吗? 不明白再问我

井研县17693119832: c语言 字符指针变量 -
姓种昊方: 对于printf这个函数,有着一系列的格式符号 比如你说的%d %s 不同的格式,有着不同的参数类型要求 比如%s 要求对应参数必须是char *型的 你例子中的string就是这一类型 所以不会出错 如果换成printf("%s",*string);,*string为char 型,对应的格式是%c 而%d对应的是整型,包括int short char等都可以用这个格式字符,不是int的会被转成int类似的 %f float %u unsigned int 对于格式输出,在网上有很多介绍 你也可以自己搜索一下

井研县17693119832: c语言中printf打印字符串的问题 -
姓种昊方: printf("%s", "Hello world"); printf() 函数 有2 个 实际参数, 第2个参数: "Hello world" 是字符串常量,存放在某内存区域. 第一个参数是格式,其中 %s 是输出格式转换. 执行时 要把 第2个参数 按 %s 的方式 作 格式转换,然后输出. ...

井研县17693119832: C语言,定义 char str[]={"microsoft"}; 输出 printf("%c",s -
姓种昊方: 哪有char str[]={"microsoft"}; 这么写的...要么str[] = {'m','i',.....}; 要么str[] = "microsoft";

井研县17693119832: C语言输入输出字符串 -
姓种昊方: char ch[5]表示的是定义了一个字符数组(即字符串),数组单元有5个,每个单元都是字符型,由于字符串是用\0作结束的,5个单元的字符数组实际上能完整存储的只能是长度不超过4个字符的字符串,多了的话就要占用其他单元了(这些单元有可能会被系统分配给其他变量,而能够用来存储字符串的就是你定义的这5个单元的字符数组),可能会出现溢出,也就是有时候会出现输出的字符串后面有乱码 char ch表示定义了一个字符变量,用scanf为其赋值的话应该用%c,即scanf("%c",&ch),它只能表示一个字符 char ch[]数组定义不允许[]里为空 char ch[1]表示的也是一个字符数组,所以你可以输入字符串,同样随便输入就有可能溢出

井研县17693119832: 很简单问题:c语言+windows API 判断两个字符串是否一样 -
姓种昊方: c语言判断字符串是否相等是不能用==的,因为c语言的字符串其实可以看作指向一个字符数组的指针,而==在这种情况下判断的是这两个指针的数值是不是一样,也就是说只有当两个指针指向同一个字符数组的时候他们才是==的,所以需要用strcmp函数来判断,这个函数会逐个比较字符串中的每个字符是否相等来判断字符串是否相同.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网