c/c++语言开发共享如何将ac字符串转换为c中的转义版本?

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

 char* str = "tHello Worldn"; char* escaped_str = escape(str); //should contain "tHello Worldn" 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=''; return dest; } 

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

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

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

     printf("tHello Worldn"); 

     const char* str = "tHello Worldn"; printf(str); 

     const char* str = "tHello Worldn"; 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[] = "ABCn"; 

    生成

     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上的文件

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

      以上就是c/c++开发分享如何将ac字符串转换为c中的转义版本?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545774.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐