函数打印奇怪的字符:v���� [重复]
Posted
技术标签:
【中文标题】函数打印奇怪的字符:v���� [重复]【英文标题】:function prints strange characters : v���� [duplicate] 【发布时间】:2017-06-11 02:11:14 【问题描述】:MAIN.C 触发函数b()
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <mysql.h>
#include "main.h"
int main()
const char *a;
a = b();
printf("%s\n", a);
MAIN.H 中的函数 b() 以结果响应
static inline const char *b()
const char* retu;
char query[300];
sprintf(query, "select * from TEST limit 1");
retu = query;
return retu;
这是 MAIN.C 脚本打印的内容:
v����
这是奇怪的东西。不像预期的那样。 (有意)
【问题讨论】:
未定义的行为是未定义的。您很幸运,它没有起作用,请参阅副本。 【参考方案1】:retu
指向的是query
,当 b 完成时,它超出了范围,所以内存在 main 中不再有效。
要创建一个比 b 更持久的字符串,您需要在堆上分配它,例如使用 malloc。
【讨论】:
【参考方案2】:const char* retu;
char query[300];
sprintf(query, "select * from TEST limit 1");
retu = query;
return retu;
//query goes out of scope here
一旦函数结束query
超出范围,因为它是在堆栈上声明的。现在你试图在它超出范围后引用这个内存,这是未定义的行为。你可以分配query
on堆。还记得释放内存。
char *query = malloc(sizeof(char) * 300);
【讨论】:
以上是关于函数打印奇怪的字符:v���� [重复]的主要内容,如果未能解决你的问题,请参考以下文章