gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:49:45 25 4
gpt4 key购买 nike

是否有任何内置函数或替代的简单快速的方法来转义 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 转义字符。

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;
}

最佳答案

不,没有任何标准函数可以创建字符串的源代码版本。但是您可以使用 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);
}

关于c - 如何将 c 字符串转换为其在 c 中的转义版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com