调用 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
我正在尝试用 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