这段代码对我的品味有点奇怪.拜托,有人在乎解释原因吗?以及如何强制'\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参数),但我认为在这里求解也会解决问题.
出于所有目的,这只是照顾\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)