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

时间:2016-04-14 00:47:15

标签: 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;
}

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

2 个答案:

答案 0 :(得分:1)

shell似乎无法识别并转换&#34;转义序列&#34;。使用支持\n转义序列的shell软件。

答案 1 :(得分: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)=' ';
            }
}