【问题标题】:How to replace single and double quotes with escape sequences (for string passed to strtok)如何用转义序列替换单引号和双引号(对于传递给 strtok 的字符串)
【发布时间】:2014-07-24 02:59:57
【问题描述】:

我正在尝试用 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 的其他方法的建议!

提前感谢您的帮助。

【问题讨论】:

  • 您正在做的是将单个字符替换为 2 个字符。 strtok 的分隔符是什么?
  • 我使用空格分隔,即" "。是的,我有这种怀疑,但我想也许因为转义字符是为了在我的源文件中转义,它可能只编译为一个字符。这可能没有任何意义。

标签: c escaping quotes strtok


【解决方案1】:
'\\\''

这是用于引用一个符号字符。但是您正试图在其中放置两个字符。你不能那样做。

如果您试图转义字符串,则必须创建一个新字符串(或在当前字符串中移动内容)以插入额外字符。

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

【讨论】:

  • 啊,好的。感谢您确认这两件事。我先做一点调试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2014-03-07
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多