void SendStr(unsigned char *p)
{
while((*p)!='\0')
{
wr_data( *p++);
}
}
void main()
{
a=panduan (); //panduan()和a都是unsigned char
SendStr(a);
}
求指教 麻烦看下错误在哪!感谢!
panduan ()变量的个数不确定 所以我不能用发送单个的字符吧!如果用\0结尾也不好修改 求指点
。或者把a转换成其他什么类型的呢!现在编译的情况是非法的指针转换。
我想实现的就是把变量a发送出去!a的个数由panduan (),panduan ()的个数不确定! 先谢谢了。。。
非法的指针转换问题!!!
答案:5 悬赏:10 手机版
解决时间 2021-03-05 11:24
- 提问者网友:骑士
- 2021-03-04 11:53
最佳答案
- 五星知识达人网友:迟山
- 2021-03-04 12:17
如果a是基本变量的话,
SendStr(a); 这个错了,改为
SendStr(&a);
SendStr(a); 这个错了,改为
SendStr(&a);
全部回答
- 1楼网友:duile
- 2021-03-04 15:36
一楼的很详细~~~
- 2楼网友:廢物販賣機
- 2021-03-04 14:46
非法指针转换是一个很大的问题,说明你的基础还不牢固.注意看看书.
你的表达我不是很理解:
是不是panduan()所返回的字符个数不确定?可以把变量a的类型改为指针类型,然后pandduan()返回数组的首地址,但是这样要注意变量的域生命周期.即最好用外部(全局)变量.
第二种:因为c中不能直接把一个数组返回,但是你可以自定义类型,定义个字符串型,注意是串,不是char,char是字符型.那么函数也可以直接返回.
第三种,不用函数返回赋值,把a改为数组,以形参的形式把数组a的地址传入panduan(),然后直接在运行的过程中赋值.我比较推荐这个方法.
个数不确定,就用动态分配内存,由用户指定大小,查下malloc函数.
- 3楼网友:持酒劝斜阳
- 2021-03-04 14:36
[请参考这样的程序结构]
unsigned char *a;
unsigned char *panduan()
{ unsigned char *b;
// 其他程序段
b=(unsigned char *)malloc(sizeof(unsigned char)*n); //这里n是本次要发送的字节个数
// 填充b[0]--b[n-1]要发送的字节
return(b);
}
void SendStr(unsigned char *p)
{
while((*p)!='\0')
{
wr_data( *p++);
}
}
void main()
{
unsigned char *a;
a=panduan (); //panduan()和a都是unsigned char
if ( a ) SendStr(a);
if ( a ) free(a);
}
- 4楼网友:逃夭
- 2021-03-04 13:15
SendStr期待一个字符串,你却传给它一个字符。
即使你改为SendStr(&a)也会出错,因为a作为一个字符,根本不是以='\0'结尾的。
既然你只需要传给SendStr一个字符,就没必要用指针
void SendStr(unsigned char c)
{
wr_data( c);
}
如果你需要传一个字符串,那么就应该把panduan()和a的类型改为unsigned char*, 并且以'\0'结尾
既然panduan ()的个数不确定,那么它的返回值的类型肯定不是unsigned char吧,unsigned char是单个字符。
如果panduan ()的个数不确定,那么你怎么知道其中字符的个数呢?所以它必须以'\0'结尾,否则这个函数就是错的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯