这段代码对我的品味有点奇怪。拜托,有人在乎解释原因吗?以及如何强迫' \ 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.参数)读取文件时遇到问题,但我认为这里的求解也将在那里解决。
答案 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)=' ';
}
}