【发布时间】:2016-04-14 00:47:14
【问题描述】:
这段代码对我来说有点奇怪。拜托,有人愿意解释为什么吗?以及如何强制 '\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. 参数),但我认为在这里解决也会在那里解决。
【问题讨论】:
-
反斜杠转义在 C 源代码 中很重要,但它们对
printf、fgets和任何其他 C 运行时库函数都不重要。 shell 可能会将命令行参数的反斜杠转换为其他内容,但您不能指望这种情况发生,也不能指望它与 C 编译器对字符串文字所做的一致。如果您想将\n转换为程序输入中的换行符,您必须自己手动完成。 -
谢谢。非常中肯的评论。也许在庞大的 C 库中已经有了这样的功能?
-
很遗憾的说没有这个功能。
-
如果有人好奇,gcc.gnu.org/git/?p=gcc.git;a=blob;f=libcpp/charset.c#l1257 是 GCC 在字符串文字中实现反斜杠转义的核心。您还需要阅读子例程(向上滚动)和调用上下文(向下滚动)。
-
与往常一样,如果您投反对票,请务必说明您认为这个问题值得回答的原因。基于此,我们可以编辑和改进问题。这就是使该站点非常适合搜索的原因。谢谢。