C库函数int memcmp(const void * str1,const void * str2,size_t n))比较内存区域str1和内存区域str2的前n个字节。
我应该得到strlen(str1)和strlen(str2)的最小值吗?
例如,我有一个由str1
指向的内存块和一个字符串str2
,我想比较str1_len
个str1
内存块和{{1}字节}}
str2
所以我的问题是,我应该确保memcmp(str1, str2, str1_len); // suppose I already have str1_len
or
memcmp(str1, str2, str1_len < strlen(str2) ? str1_len : strlen(str2)); // should I compare first?
memcmp(str1, "ASDF", str1_len); // suppose I already have str1_len
or
memcmp(str1, "ASDF", 4); // is it safe to just use 4?
or
memcmp(str1, "ASDF", str1_len < 4 ? str1_len : 4); // should I compare first?
小于要比较的长度吗?
例如,如果n
为10,但str1_len
为3,如果我执行strlen(str2)
,是否安全?
或者例如,说memcmp(str1, str2, str1_len)
内存块是str1
个字节,而18
要比较的是str1_len
,但我有10
str2
1}}字节,如果我做20
,是否安全?
答案 0 :(得分:1)
所以我的问题是我应该确保n小于要比较的长度吗?
不,n
是要比较的长度。如果您的意思是考虑将n
设置为两个长度中较短的一个,那么这很好,但您仍然需要处理str1
和str2
不同的情况长度和第一个n
字节是相等的。例如,memcmp(str1, str2, n)
可能会返回0
,但您仍需要确定str1
或str2
是否比另一个更长并采取相应行动。
听起来你最好使用strncmp()
,它适用于字符串但可以指定长度。所以你可以打电话:
strncmp(str1, str2, str1_len)
以便比较最多str1_len
个字符。然后,您必须考虑的唯一额外情况是该调用何时返回0
,表示相等,但strlen(str2)
大于str1_len
。