调用 sprintf 的编译器错误:"expected 'char *' but argument is of type 'char'"

Compiler errors calling sprintf: "expected 'char *' but argument is of type 'char'"

我正在尝试用 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: warning: passing argument 1 of 'sprintf' makes
pointer from integer without a cast. note: expected 'char *'
but argument is of type 'char'

calibrate.c:61:5: warning: passing argument 1 of 'strlen' makes
pointer from integer without a cast.  note: expected 'const char *'
but argument is of type 'char'

calibrate.c:61:5: warning: passing argument 2 of 'memcpy' makes
pointer from integer without a cast. note: expected 'const void *' but
argument is of type 'char'

我不确定自己做错了什么,我使用以下定义作为起点

void *memcpy(void *str1, const void *str2, size_t n)
size_t strlen(const char *str)
char *p = "String";

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);
}

NB 每当您为字符串分配内存时,请确保分配比字符串长度多 的空间,以存储零分隔符(strlen 和许多其他功能需要这个)

您错误地使用了指针。 "string" 被定义为字符数组,因此当您编写 char *mystring 时,您声明的是指向字符数组(或字符串)的指针。

现在,如果您在代码中使用 *mystring 取消引用 mystring,您将获得该数组的第一个元素,它只是一个字符。正如警告所说,这些函数接受 char* 参数,而不是 char.

所以,只传递指针,不取消引用:

void myfunction(){
    sprintf(mystring, "%ld", (long)(slope * 10000));
    memcpy(LCDline1, mystring, strlen(mystring)+1);
}
Char *c;

这可以是存储字符的数组的起始地址,但是,

c //is the pointer to array
*c // will give starting character of array