检查char数组是否由2个相同的数组构成

时间:2014-02-15 17:19:19

标签: c++ char

只有当通过连接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中比较了什么?非常感谢您的帮助!

1 个答案:

答案 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本身,因此永远不会结束。