Rob*_*rtS -2 c c++ string strlen nul
我知道这strlen()不算NUL终止符。我真的知道这是事实。因此,这个问题不是关于为什么strlen()可能“大概”不返回正确的字符串长度的问题,在StackOverflow,此线程或该线程中已经在很多地方对此进行了很好的询问和回答。
因此,让我们继续我的问题:
在ISO / IEC 9899:1990(E)中;7.1.1。声明:
字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。
原因是什么,为什么会strlen()偏离此既定标准,并且不“希望”接受带有 NUL终止字符的字符串?
为什么?
因为您希望此伪代码的断言成立,所以:
str1 = "foo"
str2 = "bar"
str3 = concatenate(str1, str2)
Assert strlen(str1) + strlen(s2) == strlen(str3)
Run Code Online (Sandbox Code Playgroud)
如果终止用来'\0'计数strlen,则断言将不成立,这比当前C字符串的行为要严重得多。更重要的是,我认为这将是很不直观和不合逻辑的。