实际应用中再一次遇到了函数参数是二级指针的问题,如下是正确的版本
void main(void) { //一级指针 uint8 *value_data_string = NULL; fun_change(&value_data_string ); printf((char *)value_data_string ); fun_free(&value_data_string ); } void fun_change(uint8 **tem_buf) { int value_len = 5; *tem_buf = (uint8 *)malloc(value_len); strncpy(*tem_buf, "12345", 5);
printf(tem_buf); } void fun_free(uint8 **tem_buf) { free(*tem_buf); }
如下是错误的版本,在于一级指针只能改变其指向的内容,而不能改变其本身的值,所以在fun_change里面给tem_buf赋值,形参改变,实参不改变。
void main(void) { //一级指针 uint8 *value_data_string = NULL; fun_change(value_data_string ); printf((char *)value_data_string ); fun_free(value_data_string ); } void fun_change(uint8 *tem_buf) { int value_len = 5; tem_buf= (uint8 *)malloc(value_len); strncpy(tem_buf, "12345", 5);
printf(tem_buf); } void fun_free(uint8 *tem_buf) { free(tem_buf); }