请注意,它说的是字符数组。根据定义,如果一个字符数组没有以 null 结尾,它就不是字符串。
strncmp
函数的返回值为整数,其大小可能大于、等于或小于零,具体取决于指针s1
指向的可能以 null 结尾的数组是否大于、等于或小于指针s2
指向的可能以 null 结尾的数组。
strncmp()
的规范确实省略了任何要求比较的数组必须以null结尾的要求。 - John Bollinger<string.h>
库的部分开头,标准说明了参数 n
指定数组的长度。strncmp
函数也不需要 NULs。这意味着在访问 s1
或 s2
之前以及在 s1+n
或 s2+n
之后的内容都不会被访问到。 - giustis1
中的所有字符进行比较。它不会比较来自指针的不同偏移量处的字符。我很想说,如果s1
以空字符结尾且小于s2
,那么s2
只会在其前strlen(s1)
个字符处被访问。但我不确定。 - giustiNULL
是指针相关的“空指针常量”。在讨论指针时使用大写的 NULL
。 - chux - Reinstate Monica'\0'
。请参见此链接。 - chux - Reinstate Monica\0
或简单地写0
,你很可能不会有混淆的风险。 - giustistrncmp
建立了一个限制:如果存在空字符,它将永远不会读取超过该字符,但它并不强制要求必须有一个空字符。另外,在使用strncmp
时,您始终需要指定应该检查的最大字符数。 - giustistrncmp
期望以空结尾的字符串。这只是意味着strncmp
需要一个特殊情况来说明(例如)abc\0def...
和abc\0xyz...
相等。比较两个未以空结尾的字符数组(在指定长度范围内)或将一个以空结尾的字符数组与另一个未以空结尾的字符数组进行比较都没有问题。 - David Hammen
'\0'
结尾的char
数组不是字符串! - too honest for this sitenm
的一部分,该部分解析具有Mach-O格式的二进制文件,并且我别无选择,segname
是Mach-O头文件中的部分结构体。否则,我将会多花费一个字符。通过字符串,我们指的是空终止字节数组
,即使C语言中没有字符串类型。请查看下面关于“读取字节”和“比较字节”的差异的讨论。我的计算机上的手册(OSX / Ubuntu)都提到了字符串或以空符结尾的数组,由于手册不同,因此我希望能从标准中引用出处。 - Bilowstrncmp
有问题。在提问之前阅读标准通常是一个好习惯。或者,就像我所写的那样,有一个正确的手册可供参考。 - too honest for this site