在 C 中的 char[] 之前和之后附加 '

Lea*_*ode 0 c string string-concatenation segmentation-fault strcat

我试图在字符数组之前和之后附加单引号。以下是我正在尝试的代码:

static const char str[] = "select * from name";
STATICF boolean test(){
   char[] key = "1234";
   strcat(str,(const char *)"\'");
   strcat(str,key);
   strcat(str,(const char *)"\'");
}
Run Code Online (Sandbox Code Playgroud)

当我遇到分段错误时,它不起作用。我怎样才能解决这个问题?

dbu*_*ush 5

数组str被初始化为与初始化它的字符串一样大。这意味着尝试将任何内容附加到该字符串将写入超过数组的末尾。这样做会调用未定义的行为,在这种情况下会导致程序崩溃。

您需要使目标字符串足够大以容纳结果字符串,并且不需要将其限定为const.

此外,手动构造 SQL 字符串是一个坏主意,因为它可能导致 SQL 注入攻击。您应该改为使用可以安全地将参数注入命令的准备好的语句。

static const char str[] = "select * from name";
STATICF boolean test(){
   char[] key = "1234";
   int len = strlen(str) + 1 + strlen(key) + 1 + 1;
   char dest[len];
   strcpy(dest,str);
   strcat(dest,"'");
   strcat(dest,key);
   strcat(dest,"'");
}
Run Code Online (Sandbox Code Playgroud)