只有当通过连接2个相同的数组字符串获得由10个字符组成的字符数组时,以下哪个表达式才会返回?
a) strcmp(s, s+5) == 0
b) s==strstr(s, s+5)
c) s==s+5
d) strcmp(s, strcat(s, s+5))==0
我检查了每个答案,并发现b实际上是正确的答案。对于a)我认为它逐个字符地检查,直到达到s + 5中的NULL字符。因此它返回1(s> s + 5)。如果这是错误的,请纠正我。
但我无法理解c和d中“幕后”会发生什么。在s == s + 5中比较了什么?非常感谢您的帮助!
答案 0 :(得分:0)
如果s
保证恰好是10个字符:
strncmp(s, s+5, 5) == 0
至于你原来的候选人:
a) strcmp(s, s+5) == 0
s
是一个包含10个字符的字符串,s+5
是一个包含5个字符的字符串,因此总是会评估为false。
b) s==strstr(s, s+5)
这实际上是你想要的。如果字符串的前半部分和后半部分相同,则在整个字符串中搜索后半部分作为子字符串将返回s
作为第一次出现。如果它们不相同,那么无论它返回什么都不是s
。
c) s==s+5
这只是比较两个不同的字符指针,并且总是评估为false。
d) strcmp(s, strcat(s, s+5))==0
对strcat()
的调用会导致灾难,因为它正在尝试将字符串s+5
附加到s
的末尾。它会将从s+5
开始的字符复制到s
的末尾,这反过来会延长字符串s+5
本身,因此永远不会结束。