Bil*_*low 45 c standards standard-library strncmp
我有一个16字节的数组,其中包含可执行文件的段名.
char segname[16];
Run Code Online (Sandbox Code Playgroud)
如果段名长度小于16个字节,则其余部分用空字节填充.否则,没有终止空字节.
我想比较segname各种字符串,例如__text.
strncmp使用非空终止字符串调用是否合法?
这篇文章假设它是合法的.此源代码也使其合法化.但是我的男人的页面说:
该
strncmp()函数按字典顺序比较以null结尾的字符串s1和s2.
传递给strncmp的大小将是segname.
我想知道我应该参考什么.
giu*_*sti 67
根据C99标准,第7.21.4.4节,§3.,它是合法的:
该
strncmp函数返回一个大于,等于或小于零的整数,因为指向的可能以null结尾的数组s1大于,等于或小于指向的可能以null结尾的数组s2.
但请注意,它表示字符数组.根据定义,如果字符数组不以空值终止,则它不是字符串.
use*_*738 15
strncmp函数比较s1指向的数组与s2指向的数组不超过n个字符(不会比较空字符后面的字符).
规范7.24.4.2说明了这一点.C11标准.
不跟随空charcaters的字符不进行比较,因此它需要空结束字符数组或字符串.1
你也可以在这里使用非空终止字符,但是在这种情况下我们必须指定我们必须检查它的长度,这在某些情况下是有用的.
更正
[1] 不会比较不遵循空字符的字符并不意味着strncmp期望以空字符结尾的字符串.它只是意味着strncmp需要一个特殊情况,以便(例如)说abc\0def......和abc\0xyz...比较相等.比较两个非空终止的char数组(达到指定的长度)或者将一个空终止的char数组与另一个非null终止的char数组进行比较没有错.
这是直接从David Hammen的注释中添加的
| 归档时间: |
|
| 查看次数: |
3453 次 |
| 最近记录: |