gpt4 book ai didi

调用 sprintf 函数

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:13 25 4
gpt4 key购买 nike

我在 R 中使用 MySQL 查询将数据插入数据库,并且我还使用字符串变量将数据插入数据库。

我收到这个错误:

format not a string literal and no format arguments [-Wformat-security]

这是代码

void add_data_to_the_table(MYSQL * connection){
char schlName[200]={};
printf("Enter the school name \n");
scanf("%s",schlName);
char query_string[] = { "INSERT INTO schools(schoolName) VALUES(%s)" };
sprintf(schlName, query_string);
if (mysql_query(connection,buf))
{
validate(connection);
}
}

我原本希望将字符串插入到数据库中的表 schools 中,但我得到了上面的错误。

最佳答案

对于初学者来说,这个数组的初始化

char schlName[200]={};

在 C 中是不正确的。大括号中的初始值设定项列表可能不为空。改写

char schlName[200]={ '\0' };

在 sprintf 的调用中,参数的顺序是无效的。看来你的意思是

sprintf( result_string, query_string, schlName );

代替

sprintf( schlName, query_string);

其中 result_string 是输出将被重定向到的字符串。

函数 sprintf 的声明如下所示

int sprintf(char * restrict s, const char * restrict format, ...);

因此,如果与参数格式对应的参数具有转换说明符,如 %s,那么您至少需要提供三个参数。

注意这个调用

scanf("%s",schlName);

不安全。使用 fgets 而不是 scanf

关于调用 sprintf 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58216687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com