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)
当我遇到分段错误时,它不起作用。我怎样才能解决这个问题?
数组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)