我正在尝试用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);
}
Run Code Online (Sandbox Code Playgroud)
当我运行编译代码时,我得到以下三个错误.
calibrate.c:60:5:警告:传递'sprintf'的参数1使得整数指针没有强制转换.注意:预期'char*'但参数类型为'char'
calibrate.c:61:5:警告:传递'strlen'的参数1使得整数指针没有强制转换.注意:预期'const char*'但参数类型为'char'
calibrate.c:61:5:警告:传递'memcpy'的参数2使得整数指针没有强制转换.注意:预期'const void*'但参数类型为'char'
我不确定我做错了什么,我使用以下定义作为我的起点
void*memcpy(void*str1,const void*str2,size_t n)
size_t strlen(const char*str)
char*p ="String";
小智 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);
}
Run Code Online (Sandbox Code Playgroud)
注意,无论何时为字符串分配内存,请确保分配比字符串长度多一个的内容,以存储零分隔符(strlen许多其他函数需要这个)