在 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初始化为与初始化它的字符串一样大。 这意味着尝试向该字符串追加任何内容将写入数组的末尾。 这样做会调用未定义的行为,在这种情况下会导致程序崩溃。

您需要使目标字符串足够大以容纳生成的字符串,并且不需要将其限定为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需要足够大以容纳整个串联的结果字符串,加上以终止字符串。在您的示例中,将str声明为:

static const char str[] = "select * from name";

str只容纳旧字符串的大小加上.因此,尝试附加更多字符会导致分段错误。


尝试以固定大小声明str,足够大以容纳结果字符串(旧的select * from name+'+1234+'+ 终止的字符串,如果我数得对,总共应该是 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,"'");
}

相关内容

  • 没有找到相关文章