我正在尝试用C编写一个微芯片。现在我正在努力更新LCD屏幕上的一条线,但它无法正常工作。任何人都可以对此有所了解吗?
float slope = 0.0626;
char *mystring;
int8_t LCDline1[20];
void myfunction(){
sprintf(*mystring, "%ld", (long)(slope * 10000));
memcpy(LCDline1, *mystring, strlen(*mystring)+1);
}
当我运行编译代码时,我得到以下三个错误。
calibrate.c:60:5:警告:传递' sprintf'品牌 没有强制转换的整数指针。注意:预期' char *' 但参数的类型为' char'
calibrate.c:61:5:警告:传递' strlen'品牌 没有强制转换的整数指针。注意:预期' const char *' 但参数的类型为' char'
calibrate.c:61:5:警告:传递' memcpy'品牌 没有强制转换的整数指针。注意:预期' const void *'但 参数的类型为' char'
我不确定我做错了什么,我使用以下定义作为我的起点
void * memcpy(void * str1,const void * str2,size_t n)
size_t strlen(const char * str)
char * p =" String&#34 ;;
答案 0 :(得分:11)
mystring
已经是一个指针。 *mystring
取消引用它以提供第一个字符。您只想传递mystring
。
您还必须使用mystring
静态或动态地为malloc
分配一些内存。
float slope = 0.0626;
char* mystring;
/* char mystring[50]; */ // or just do this, as Sahu and John suggested
int8_t LCDline1[20];
void myfunction(){
mystring = (char*)malloc(mystring_size); // set this to any size
sprintf(mystring, "%ld", (long)(slope * 10000));
memcpy(LCDline1, mystring, strlen(mystring)+1);
}
注意,无论何时为字符串分配内存,请确保分配一个而不是字符串的长度,以存储零分隔符(strlen
和许多字符串其他功能需要这个)
答案 1 :(得分:2)
您使用指针不正确。 “字符串”被定义为字符数组,因此当您编写char *mystring
时,您将声明指向字符数组(或字符串)的指针。
现在,如果您在代码中使用mystring
取消引用*mystring
,那么您将获得该数组的第一个元素,它只是一个字符。正如警告所说,这些功能接受char*
参数,而不是char
。
所以,只需传入指针,不要解除引用:
void myfunction(){
sprintf(mystring, "%ld", (long)(slope * 10000));
memcpy(LCDline1, mystring, strlen(mystring)+1);
}
答案 2 :(得分:0)
Char *c;
这可以是存储字符的数组的起始地址,但是,
c //is the pointer to array
*c // will give starting character of array