【发布时间】:2010-07-08 07:27:08
【问题描述】:
是否有任何内置函数或替代的简单快速的方法来转义 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;
}
【问题讨论】:
-
我很好奇:printf("%s", str); 怎么了? ?
-
不,我需要转义字符串。这只是一个例子。
-
查看编译器将 \t \n 等转换为 ascii 等价物。我有我需要转义的 ascii 字符串。
-
您是否正在寻找一种方法来生成要包含在 C 源代码中的字符串?正如@Ben 回答的那样,
printf()与反斜杠转义无关。 -
您应该在下面发布自己的解决方案作为答案,以便可以像其他答案一样对其进行投票,而不是将其编辑到您的问题中。 (此外,您的解决方案无法正确转义任意控制字符,例如
'\4'或'\177'。)
标签: c