【问题标题】:C: Replacing Escape Characters esp '\\'C: 替换转义字符 esp '\\'
【发布时间】:2014-09-13 22:52:13
【问题描述】:

我的这部分代码应该用括号中的十六进制代码替换所有读取的转义字符(因为它们会弄脏东西)。除了反斜杠 '\\' 的转义字符外,它可以工作,我不知道为什么。

if(bt[j] == '\\')
{
   switch(bt[j+1])
   case 'n':
      strcat(at,"(0x0a)");break;
   case ...
      ...
   case '\\':
      strcat(at,"(0x5c)");break;
   ...
...
}

编辑: 我需要删除不是转义字符的反斜杠。 所以“hello\nb\ob”将是“hello(0x0a)bob” 和 "hello\nb\\ob" 将是 "hello(0x0a)b(0x5c)ob"

【问题讨论】:

  • 可能是拼写错误,但在 case '\\' 后面缺少分号
  • 好吧,我需要区分 \\ 读取和 \ 读取。
  • NicholasKunze @David Beech 的评论是否正确?代码应为 case '\\': ':' 添加。
  • 我用 c 编码已经有一段时间了,但我相信你需要一个 ':' 。就像 case 'n' 一样:

标签: c escaping character


【解决方案1】:
#include <stdio.h>
#include <string.h>

void func(char at[], char bt[]){
    int j;
    for(j=0; bt[j]; ++j){
        switch(bt[j]){
        case '\n':
            memcpy(at, "(0x0a)", 6);
            at += 6;
            break;
        case '\\':
            memcpy(at, "(0x5c)", 6);
            at += 6;
            break;
        //...
        default:
            *at++ = bt[j];
        }
    }
    *at = '\0';
}

int main(){
    char at[256];
    char *bt;
    func(at, "hello\nb\ob");
    puts(at);
    func(at, "hello\nb\\ob");
    puts(at);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2013-05-17
    • 2012-04-07
    相关资源
    最近更新 更多