我有程序使用 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/