如何在C中的char *字符串中转义特殊字符

时间:2014-09-29 21:12:03

标签: c string escaping

我从fgets函数中获取字符串。我想将该字符串清理成一个新字符串,以便第二个字符串包含所有特殊和潜在危险的字符,类似于您在PHP中使用addslashes()或mysql_real_escape_string()所做的操作。如PHP手册中所定义:

  

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',"和\ x1a。

我不打算将此数据发送到mysql查询,也不打算与任何SQL服务器建立当前连接,只是希望在Linux机器上运行的简单CLI C程序中清除它。这将用于Splint的简单静态分析。我已经在这里查看了其他几个问题并且没有得到它。

void clean_string(char * origin, char * destiny)
{ 
   //copies the origin to destiny scaping characters
}

2 个答案:

答案 0 :(得分:0)

您可以直接使用字符串。循环遍历字符数组的每个位置,如果你有一个特殊字符,那么只需用其他东西替换它。

#include <stdio.h>
#include <string.h>

int main()
{
  char str[] = "Hello\tworld\n!";
  int i, len;

  len = strlen(str);

  printf("%s\n", str);

  for (i = 0; i < len; ++i) {
    switch (str[i]) {
    case '\n':
      str[i] = '$';
      break;
    case '\t':
      str[i] = '$';
      break;
    }
  }

  printf("%s\n", str);

  return 0;
}

答案 1 :(得分:-1)

目前还不清楚为什么你认为字符串有&#34;危险&#34; chars,但如果你想逃避其中一些:

const char *str = "my dangerous";
const char *ooh = "aeoui\\";

char buf[BIG_ENOUGH];
size_t bp = 0;

for (size_t sp = 0; str[sp]; sp++) {
    if (strchr(ooh, str[sp])) buf[bp++] = '\\';
    buf[bp++] = str[sp];
}
buf[bp] = 0;