解释printf中的'\n'("%s",字符串)

Dr *_*eco 5 c string printf

这段代码对我的品味有点奇怪.拜托,有人在乎解释原因吗?以及如何强制'\n'被解释为一个特殊的字符?

beco@raposa:~/tmp/user/foo/bar$ ./interpretastring.x "2nd\nstr"
1st
str
2nd\nstr
beco@raposa:~/tmp/user/foo/bar$ cat interpretastring.c
#include <stdio.h>

int main(int argc, char **argv)
{
    char *s="1st\nstr";

    printf("%s\n", s);
    printf("%s\n", argv[1]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

底线,意图是第二个字符串要打印成两行,就像第一行一样.这个程序是一个简化.真正的程序在使用文件读取时遇到了问题fgets(不是argv像这里那样的SO参数),但我认为在这里求解也会​​解决问题.

Dr *_*eco 0

出于所有目的,这只是照顾\n,没有其他角色得到特殊待遇。

这里的答案以较低的复杂性完成了这项工作。它不会将“2 个字符”更改为“一个特殊字符\n”。它只是更改<\><n>为“ <space><newline>”。没关系。如果有一个C Standard Library解释chars字符串中的特殊字符(例如我知道它有RegExp),那就更好了。

/* change '\\n' into ' \n' */
void changebarn(char *nt)
{
    while(nt!=NULL)
        if((nt=strchr(nt,'\\')))
            if(*++nt=='n')
            {
                *nt='\n';
                *(nt-1)=' ';
            }
}
Run Code Online (Sandbox Code Playgroud)