C字符串打破多个'\ n'

时间:2017-10-26 14:16:16

标签: c string

int main(void){
char* line = "CCCCCCC\nC+\nC++";
char* line2 = "a\nb\nc";
//char* pattern = ".\\+\\+";
//int n= strlengp(line);
printf("%s\n", line);
printf("%s\n", line2);
fputs(line, stdout);

此代码正确打印: 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;
}

现在,当我在包含与上面代码“CCCCCCC \ nC + \ nC ++”,“a \ nb \ nc”相同字符串的测试测试文件上运行上述代码时。

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

CCCCCCC \ NC + \ NC ++

一个\ NB \ NC

明显忽略'\ n'。

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

CCCCCCC

C +

C ++

B'/ P>

C

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

这会导致undefined behavior,因为您尝试将写入不可修改的内存!!

这一行

 string[i] = '\0';

的罪魁祸首。

要获得解决方法,请将string数组设为

char string[] = "a\nb\nc";

允许目标可修改。

相关问题