编译器错误调用sprintf:"期望' char *'但论证的类型是' char'"

时间:2016-06-29 20:31:36

标签: 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);
}

当我运行编译代码时,我得到以下三个错误。

  

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

3 个答案:

答案 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