调用sprintf的编译错误:"expected'char*',但参数类型为'char'"

Bob*_*Bob 2 c pointers

我正在尝试用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许多其他函数需要这个)