在 C 中的 char[] 之前和之后附加 '
Append ' before and after char[] in C
我正在尝试在 char 数组前后附加单引号。以下是我正在尝试的代码:
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
被初始化为与初始化它的字符串一样大。这意味着尝试向该字符串追加任何内容都会超出数组的末尾。这样做会调用 undefined behavior,在这种情况下会导致您的程序崩溃。
您需要使目标字符串足够大以容纳结果字符串,并且您不需要将其限定为 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
需要足够大以容纳整个连接的结果字符串,加上 [=14=]
以终止字符串。在您的示例中,将 str
声明为:
时情况并非如此
static const char str[] = "select * from name";
与 str
仅保留旧字符串的大小加上 [=14=]
。因此,尝试附加更多字符会导致分段错误。
尝试用固定大小声明str
,大到足以容纳结果字符串(select * from name
+\'
+1234
+[=的旧字符串20=] + 终止符 [=14=]
如果我没数错的话,总共应该是 25 个字符)。
str
需要非常量顺便改变str
的值,所以省略static const
.
也省略了(const char *)
的转换;并将 "\'"
替换为 "'"
.
结果如下:
char str[25];
strcpy(str,"select * from name");
STATICF boolean test(){
char key[] = "1234";
strcat(str,"'");
strcat(str,key);
strcat(str,"'");
}
我正在尝试在 char 数组前后附加单引号。以下是我正在尝试的代码:
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
被初始化为与初始化它的字符串一样大。这意味着尝试向该字符串追加任何内容都会超出数组的末尾。这样做会调用 undefined behavior,在这种情况下会导致您的程序崩溃。
您需要使目标字符串足够大以容纳结果字符串,并且您不需要将其限定为 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
需要足够大以容纳整个连接的结果字符串,加上 [=14=]
以终止字符串。在您的示例中,将 str
声明为:
static const char str[] = "select * from name";
与 str
仅保留旧字符串的大小加上 [=14=]
。因此,尝试附加更多字符会导致分段错误。
尝试用固定大小声明str
,大到足以容纳结果字符串(select * from name
+\'
+1234
+[=的旧字符串20=] + 终止符 [=14=]
如果我没数错的话,总共应该是 25 个字符)。
str
需要非常量顺便改变str
的值,所以省略static const
.
也省略了(const char *)
的转换;并将 "\'"
替换为 "'"
.
结果如下:
char str[25];
strcpy(str,"select * from name");
STATICF boolean test(){
char key[] = "1234";
strcat(str,"'");
strcat(str,key);
strcat(str,"'");
}