mysql - c 上的 const char 具有相同的变量但不同的值

标签 mysql c

我有程序使用 C 和 C++ 语言从 MySQL 数据库访问数据。 代码:

const char *query="SELECT * FROM myTable;";
printf("%s\n",query);
state=mysql_query(sock,query);
printf("%s\n",query);

从该代码中,“state”语句之前和之后的查询值是相同的(SELECT * FROM myTable;)。但对于这段代码:

const char *query=getQuery();
printf("%s\n",query);
state=mysql_query(sock,query);
printf("%s\n",query);

功能:

const char * getQuery(){
 const char *returnValue;
 char q[BUFSIZ];
 sprintf_s(q,"%s","SELECT * FROM myTable;");
 returnValue=q;
 return returnValue;
}

从这段代码中,“state”语句之前和之后的查询值不同,之前(SELECT * FROM myTable;)和之后(1/4>-uC^M)。

有人知道吗?

提前致谢。

最佳答案

问题是您正在返回一个局部变量。 执行函数 getQuery() 后,q 将消失,指针 u 返回指向无效内存并读取乱码。 它在查询之前而不是在查询之后起作用的原因是因为数据尚未被覆盖。

你想要的是这样的

char *returnvalue = (char *) malloc(sizeof(char)*BUFSIZ);
char q[BUFSIZ];
sprintf_s(q,"%s","SELECT * FROM myTable;");
memcpy(returnvalue, q, BUFSIZ);
return returnvalue;

或者这个

char *returnvalue = (char *) malloc(sizeof(char)*BUFSIZ);
sprintf_s(returnvalue ,"%s","SELECT * FROM myTable;");
return returnvalue;

查询结束后,您必须记住释放分配的内存。

free(query);

关于mysql - c 上的 const char 具有相同的变量但不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212930/

相关文章:

python - django 访问模型需要花费很多时间

mysql - 在一对多关系查询期间使用 LIMIT

c - 如何将库添加到 Eclipse C 项目?

c - 如何从窗口中删除 WS_EX_TOPMOST 样式?

mysql - MySQL 用于联锁操作安全吗?

PHP,foreach 奇怪的行为

c - 套接字:为什么阻塞 read() 因 ENOTCONN 而失败?

c++ - 如何在构建后剥离编译时宏中的代码

C:用指针返回数组程序中的偶数,为什么我的程序打印结果后崩溃

mysql - 更新 id 给出的当前记录下方的所有记录