我需要分两个单独的步骤来完成此操作,但到目前为止我还没有找到执行此操作的方法。
首先,我需要将 double 变量转换为 char 变量(并保存在该变量中)。我注意到类型转换在 C 中的工作方式与 Java/其他语言不同。如何将变量转换为字符串/字符?
其次,我需要连接字符串,总共有 6 个字符串变量需要连接,我只找到了 strcat
函数,它只需要 2 个参数。
这些是我正在尝试构建的字符串:
char *queryOne = "INSERT INTO location (id, carid, ownerid, lat, long, speed) VALUES (,2, 1, ";
char *queryTwo = lat; // lat is a double
char *queryThree = ",";
char *queryFour = longatude; // longatude is a double
char *queryFive = ",";
char *querySix = speed; // speed is a double
然后我需要连接字符串来工作:(mysql_query(conn, query))
作为一个长字符串
编辑:所以可能,这应该转换我认为的数据类型?
char buffer [50];
char *queryOne = "INSERT INTO location (id, carid, ownerid, lat, long, speed) VALUES (,2, 1, ";
char *queryTwo = sprintf (buffer, "%d", lat);
char *queryThree = ",";
char *queryFour = sprintf (buffer, "%d", longatude);
char *queryFive = ",";
char *querySix = sprintf (buffer, "%d", speed);
fprintf(stderr, "Dta: %s\n", queryOne);
fprintf(stderr, "Dta: %s\n", *queryTwo);
fprintf(stderr, "Dta: %s\n", queryThree);
fprintf(stderr, "Dta: %s\n", *queryFour);
fprintf(stderr, "Dta: %s\n", queryFive);
fprintf(stderr, "Dta: %s\n", *querySix);
最佳答案
根据您的情况,您可以使用:
#define MAXSQL 256
char sql[MAXSQL];
snprintf(sql, MAXSQL, "%s %f , %f , %f", queryOne, lat, longatude, speed);
snprintf
函数写入缓冲区,这是它的第一个参数。 http://www.cplusplus.com/reference/cstdio/snprintf/?kw=snprintf
现在您可以随意使用 sql
字符串。
请注意,我使用的是 snprintf 而不是 sprintf。这是为了避免潜在的缓冲区溢出。
另外,不要重复使用 strcat,因为这会导致 Shlemiel the Painter 算法,并且每次对 strcat 的调用都会变慢,因为 strcat 必须从头开始并找到 null 终止符。请参阅http://www.joelonsoftware.com/articles/fog0000000319.html了解更多信息。
关于sql - 在 C 中连接字符串以组成 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841125/