我从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
}
答案 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;