我正在尝试在字符数组前后附加单引号。以下是我正在尝试的代码:
static const char str[] = "select * from name";
STATICF boolean test(){
char[] key = "1234";
strcat(str,(const char *)"'");
strcat(str,key);
strcat(str,(const char *)"'");
}
它不起作用,因为我遇到分段错误。我该如何解决这个问题?
数组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,"'");
}
strcat(str,(const char *)"'");
strcat(str,key);
strcat(str,(const char *)"'");
str
需要足够大以容纳整个串联的结果字符串,加上