![](/img/trans.png)
[英]printf(“%s\n”,str); gives segmentation fault but printf(“%s”,str); don't, where “str” is a string pointer
[英]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.