如何将ac字符串转换为c中的转义版本?

是否存在任何构建函数或替代简单快速的转义C字符数组的方法,如果与例如printf一起使用,则应该再次产生原始字符数组。

 char* str = "\tHello World\n"; char* escaped_str = escape(str); //should contain "\tHello World\n" with char \ ,t. printf(escaped_str); //should print out [TAB]Hello World[nextline] similar to if str was printed. 

c中是否有一种简单的方法来转义带有c转义字符的字符串。

更新

我有缓冲区包含一个带转义字符的字符串。 我想要包含在C文件中。 为此,我需要逃避它,以便它可以被遵守。 我只需要知道是否有简单的方法来做它而不是扫描缓冲区\ n \ t等并生成c escape字符。

 for(int i=0; i< strlen(buffer);i++) if(buffer[i]=='\n') sprintf(dest,"\\n") else .... 

更新2

我写了这个函数。 它工作正常。

 char* escape(char* buffer){ int i,j; int l = strlen(buffer) + 1; char esc_char[]= { '\a','\b','\f','\n','\r','\t','\v','\\'}; char essc_str[]= { 'a', 'b', 'f', 'n', 'r', 't', 'v','\\'}; char* dest = (char*)calloc( l*2,sizeof(char)); char* ptr=dest; for(i=0;i<l;i++){ for(j=0; j< 8 ;j++){ if( buffer[i]==esc_char[j] ){ *ptr++ = '\\'; *ptr++ = essc_str[j]; break; } } if(j == 8 ) *ptr++ = buffer[i]; } *ptr='\0'; return dest; } 

不,没有任何标准function来创建字符串的源代码版本。 但是你可以使用iscntrl函数来编写一个,或者只使用switch关键字。

但是,除非您的程序写出要通过编译器运行的C源文件,否则您不需要使用转义字符串。 printf不处理字符转义序列,只处理变量插入( %d%s等)

具体来说,以下产生相同的输出:

 printf("\tHello World\n"); 

 const char* str = "\tHello World\n"; printf(str); 

 const char* str = "\tHello World\n"; printf("%s", str); 

第二个不是一个好主意,因为如果str包含%你的程序将产生不良输出并可能崩溃。

编辑:为了生成源代码版本,有几种方法:

输出更简单但可读性更低:

 if (iscntrl(ch) || ch == '\\' || ch == '\"' || ch == '\'') { fprintf(outf, "\\%03o", ch); } else fputc(ch, outf); 

更可读的结果:

 switch (ch) { case '\"': fputs("\\\"", outf); break; case '\'': fputs("\\\'", outf); break; case '\\': fputs("\\\\", outf); break; case '\a': fputs("\\a", outf); break; case '\b': fputs("\\b", outf); break; case '\n': fputs("\\n", outf); break; case '\t': fputs("\\t", outf); break; // and so on default: if (iscntrl(ch)) fprintf(outf, "\\%03o", ch); else fputc(ch, outf); } 

如果您不要求生成的字符串是人类可读的,并且您的编译时字符集与执行字符集相同,那么最简单的方法是对所有内容使用代码点转义:

 int print_string_literal(char *s) { putchar('\"'); while (*s) { unsigned cp = (unsigned char)*s++; printf("\\x%.2x", cp); } putchar('\"'); } 

你可以把这一些用来制作更好看的字符串,但你确实要求一些简单的东西……

如果您要生成一个字符串以用作C源文件的一部分,那么引用非常复杂(您必须处理换行符,其他几个控制字符,引号,反斜杠等)。 使用字符串只是一个类似整数值的数组这一事实更快更容易 – 而不是

 char generated_file_str[] = "ABC\n\"; 

生成

 char generated_file_str[] = {65,66,67,10,0}; 

这很容易写 – 比如:

 printf("char generated_string[] = {"); for (i = 0; i < length; i++) { printf("%d, ", str[i]); } printf("0};\n"); 

您需要做的唯一转义是将每个“%”替换为“%%”; “%”是printf特别处理的唯一字符。 “\”逃脱与printf无关; 它们是C编译器对字符串文字的编译时处理的一部分。

请检查printf上的文件

您需要了解有关转义序列的更多信息。