处理\ n问题

时间:2017-10-29 02:02:46

标签: c

int main(void){
char* line = "CCCCCCC\nC+\nC++";
char* line2 = "a\nb\nc";
printf("%s\n", line);
printf("%s\n", line2);
}

此代码正确打印:CCCCCCC

C +

C ++

B'/ P>

C

现在我的问题是这个,我正在研究没有string.h实现的rgrep函数。以下是我正在编写的代码的主要内容,我不修改。

int main(int argc, char **argv) {
   if (argc != 2) {
        fprintf(stderr, "Usage: %s <PATTERN>\n", argv[0]);
        return 2;
    }

/* we're not going to worry about long lines */
char buf[MAXSIZE];

while (!feof(stdin) && !ferror(stdin)) {
    if (!fgets(buf, sizeof(buf), stdin)) {
        break;
   }
   if (rgrep_matches(buf, argv[1])) {
       fputs(buf, stdout);
       fflush(stdout);
   }
 }

if(ferror(stdin)) {
   perror(argv[0]);
   return 1;
   }

return 0;
}

int rgrep_matches(char *line, char *pattern){
   printf("%s", line);
   return 0;
}

现在,我在测试测试文件上运行上面的代码,其中包含与上述代码相同的字符串&#34; CCCCCCC \ nC + \ nC ++&#34;,&#34; a \ nb \ nc&#34;

以上代码输出的原因是什么:

CCCCCCC \ NC + \ NC ++

一个\ NB \ NC

显然忽略了&#39; \ n&#39;。

当在页面顶部发布的不同文件中构建的测试代码打印出来时:

CCCCCCC

C +

C ++

B'/ P>

C

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

C编译器将代码中的文本常量中的’\n’识别为特殊序列,并将它们转换为您所在机器的正确 RET 序列。
如果您从文件中读取\和以下n,则它们只是两个普通字符,如果您需要,您的程序需要特殊处理。< / p>