永发信息网

非法的指针转换问题!!!

答案:5  悬赏:10  手机版
解决时间 2021-03-05 11:24
  • 提问者网友:骑士
  • 2021-03-04 11:53
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 ()的个数不确定! 先谢谢了。。。
最佳答案
  • 五星知识达人网友:迟山
  • 2021-03-04 12:17
如果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'结尾,否则这个函数就是错的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯