如何用转义序列替换单引号和双引号(对于传递给strtok的字符串)

时间:2014-07-24 02:59:57

标签: c escaping quotes strtok

我试图用char数组中的转义版替换单引号和双引号。我这样做是因为strtok在点击它们时不会解析过去的单引号/双引号。

我编写了以下函数来尝试替换char数组中的单/双引号:

void replaceQuotes(char *command){
int i;

for(i = 0; i < strlen(command); i++){
    //if detected a double quote, escape it
    if(command[i] == '\"'){
        command[i] = '\\\"';
    }
    // if detected a single quote, escape it
    if (command[i] == '\''){
        command[i] = '\\\'';
    }
}

}

但是,我从gcc收到以下错误:

shell_lib.h: In function ‘replaceQuotes’:
shell_lib.h:10: warning: overflow in implicit constant conversion
shell_lib.h:14:17: warning: multi-character character constant
shell_lib.h:14: warning: overflow in implicit constant conversion

有更清洁的方法吗?实际上,我不确定这是否有效,或者strtok是否实际上正确地读取了转义序列(如果我能够逃脱它们)作为单/双引号。关于strtok返回NULL时遇到双/单引号的其他方法的建议也不胜感激!

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:1)

'\\\''

这是为了引用一个单号字符。但是你想在那里放两个角色。你不能这样做。

如果你试图逃避你的字符串,你必须创建一个新字符串(或移动当前的字符串)以插入额外的字符。

然而,听起来你的真实问题就是你试图用strtok做的事情,这应该可以正常工作,而不需要在字符串中进行任何转义。