我不相信strcmp()
的定义,它说它将比较整个字符串(作为参数传入的两个字符串,并返回-1
,0
,{{1基于1
,s1<s2
(与)s1
,s2
相同。
如果是这样,你如何证明K&amp; R下面的片段,在第一次非同等角色遭遇之后,你退出循环。我们如何比较s1>s2
和s1
的所有字符,直到结束(s2
)?
'\0'
答案 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)