- 打卡等级:常住居民III
- 打卡总天数:127
- 最近打卡:2025-06-16 10:12:05
中级会员
- 积分
- 480
|
#include <stc8h.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char xdata mempool[512]; //声明一个512字节的数组
typedef struct _num {
char text[100];
void (*setnum)(void*, char*);
}_num;
_num *num1;
void setnum(_num *num,char *str)
{
int i;
for(i = 0; i <100; i++)
{
num->text = *(str+i);
if (*(str + i) == '\0')
break;
}
}
_num* Creat_num()
{
_num* num = (_num*)malloc(sizeof(_num));
num->setnum = setnum;
return num;
}
void main()
{
init_mempool (&mempool, sizeof(mempool)); //初始化动态内存分配空间
num1 = Creat_num();//创建一个对象num1
num1->setnum(num1, "fdsfudsuifgsd\n");//通过setnum函数上设置text中的字符
printf("%s", num1->text); //在单片机上面用TFT显示屏显示
num1->setnum(num1, "wo shi rao ling yun o!!!\n");
printf("%s", num1->text);
}
这段代码在VS上运行是可以的,但是在51单片机上面就不能用,在单片机上不能通过num1->setnum(num1, "fdsfudsuifgsd\n")这种方式改变text[]的值,通过该函数过后text中的字符是乱码的,如果不通过指针去调用(num1->setnum(_num *num,char *str))的话单片机就可以正常运行(直接调用setnum(_num *num,char *str)字符显示正常)。在网上也查询了相应的资料,看得云里雾里的,还是没能解决,请各位坛友帮我解决一下,已经卡在这里半个多月了,麻烦大家了。另外51单片机是可以用动态内存分配的哦 通过这个函数init_mempool (&mempool, sizeof(mempool)); 就可以进行动态内存分配。
小弟先在这里谢谢大家。
|
|