簡體   English   中英

解釋printf中的'\\ n'(“%s”,字符串)

[英]Interpreting '\n' in printf(“%s”, string)

這段代碼對我的品味有點奇怪。 拜托,有人在乎解釋原因嗎? 以及如何強制'\\ 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的SO參數),但我認為在這里求解也會​​解決問題。

看來shell無法識別並轉換“轉義序列”。 使用支持\\n轉義序列的shell軟件。

出於所有目的,這只是照顧\\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)=' ';
            }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM