strcmp(s1,s2)只比较s1和s2的第一个非相等字符值吗?

时间:2014-03-15 23:19:31

标签: c string

我不相信strcmp()的定义,它说它将比较整个字符串(作为参数传入的两个字符串,并返回-10,{{1基于1s1<s2(与)s1s2相同。

如果是这样,你如何证明K&amp; R下面的片段,在第一次非同等角色遭遇之后,你退出循环。我们如何比较s1>s2s1的所有字符,直到结束(s2)?

'\0'

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

strcmp执行两个字符串的经典词典比较。在您找到第一个不匹配的字符的那一刻,字典比较的结果已经立即知道。这正是您在实施中看到的内容。

答案 2 :(得分:0)

const appendToState2 = <T extends Record<K, string>, K extends PropertyKey>(s: NormalizedState<T>) => (v: T[], p: K) => v.reduce((acc, m) => ({ ...acc, [m[p]]: m }), s.byId); 的大多数实现会在两个字符串中的字符不同时立即返回。因此,它并不总是比较整个字符串,因为只有相同的字符串才需要。

请注意,strcmp()不一定返回strcmp()-1(如果字符串不同)……只有返回值的符号与确定1是否相关在字典上小于或大于s1

还值得一提的是,对s2元素的比较是基于将它们转换为char的值来进行的,从而使结果独立于(unsigned char)签名的编译器设置。 char也是如此。

这是memcmp的体系结构的示例(简单)实现:

sizeof(char) < sizeof(int)