簡體   English   中英

如何在C中的char *字符串中轉義特殊字符

[英]How to escape special characters in a char* string in C

我從fgets函數得到一個字符串。 我想將該字符串清除為一個新字符串,以便第二個字符串都轉義了所有特殊的和潛在的危險字符,類似於在PHP中使用addslashes()或mysql_real_escape_string()可以執行的操作。 如PHP手冊中所定義:

mysql_real_escape_string()調用MySQL的庫函數mysql_real_escape_string,該函數將反斜杠添加到以下字符之前:\\ x00,\\ n,\\ r,\\,','和\\ x1a。

我既無意將此數據發送到mysql查詢,也無意與任何SQL Server建立當前連接,只是希望在運行於Linux機器上的簡單CLI C程序中將其清除。 這將用於帶有Splint的簡單靜態分析中。 我在這里調查了其他幾個問題,但是還沒有。

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

您可以直接使用字符串。 循環遍歷字符數組的每個位置,如果您有特殊字符,則只需將其替換為其他字符即可。

#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;
}

仍然不清楚為什么您認為該字符串具有“危險”字符,但是如果要轉義其中一些字符:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM