strlen 在这种情况下如何工作?

How does strlen works in this case?

见以下代码:

#include<stdio.h>
#include<string.h>
int main(void)
{
    printf("%lu",strlen("\n"));
}

我知道输出会是 2 但不知道 \ 是第一个考虑的字符然后 n 还是 \ 是第一个计数并且 \n 将是第二个?

"... But I am confused whether \ would be the first character taken into account and then n or \ would be the first count and \n would be the second?"

"\" 是字符串文字中 '\' 字符的表示。

因此,字符串文字 "\n" 的第一个字符是 '\',第二个字符是 'n'

您可以使用 printf("\n"); 进行实验。输出将是 \n,而不是 \(line feed)

尝试打印字符串。

#include<stdio.h>
#include<string.h>
int main(void)
{
    printf("%s","\n");
}

\n 将被打印出来。这意味着第一个字符是 \(转换为 \ 的转义序列),第二个字符是 n.

"\n" 从左到右解析。 "\" 是反斜杠(单个 \)的转义序列。 "n",在这种情况下,只是一个 "n" 而不是 "\n"。因此,两个字符 returnstrlen 编辑。

来自 C 标准(6.4.4.4 字符常量)

simple-escape-sequence: one of

\' \" \? \
\a \b \f \n \r \t \v

3 The single-quote ', the double-quote ", the question-mark ?, **the backslash **, and arbitrary integer values are representable according to the following table of escape sequences:

single quote ' \'
double quote " \"
question mark ? \?
backslash \ \
octal character \octal digits
hexadecimal character \x hexadecimal digits

因此这个字符串文字 "\n" 包含 backslash 和字符 n.