C char* printf 问题
C char* printf issue
我遇到了 char* 变量的奇怪行为
user_message* parseMessage(char *incoming_msg, uint64_t size)
{
user_message* msg = calloc(1, sizeof(user_message));
printf("value: %s\n", incoming_msg);
return msg;
}
void start_server()
{
char* msg = "1|david|pwd|";
printf("msg: %s\n", msg);
parseMessage(&msg, 12);
}
输出:
msg: 1|david|pwd|
value: �[
我很难找出代码中的错误。
parseMessage(&msg, 12);
应该是 parseMessage(msg, 12);
&msg
意味着您正在传递一个指向 msg 的指针,当函数只需要一个 char *
时,它将是一个 char **
&msg
产生 char **
或 指向字符的指针 .
您的 parseMessage
函数和 printf
说明符 %s
都需要 char *
.
这里不需要address-of operator
parseMessage(msg, 12);
函数的第一个参数parseMessage
和用作该参数参数的表达式具有不同的类型。
参数声明为 char *
类型
user_message* parseMessage(char *incoming_msg, uint64_t size)
而用作参数的表达式的类型为 char **
。
char* msg = "1|david|pwd|";
//...
parseMessage(&msg, 12);
所以实际上你不是输出指针指向的字符串msg
,而是试图将变量msg占用的内存中存储的内容及其后面的内容作为字符串输出
你至少需要像这样调用函数
parseMessage( msg, 12 );
此外,如果传递的字符串在函数内未更改,至少用限定符 const
声明第一个函数参数会更好
user_message* parseMessage( const char *incoming_msg, uint64_t size);
我遇到了 char* 变量的奇怪行为
user_message* parseMessage(char *incoming_msg, uint64_t size)
{
user_message* msg = calloc(1, sizeof(user_message));
printf("value: %s\n", incoming_msg);
return msg;
}
void start_server()
{
char* msg = "1|david|pwd|";
printf("msg: %s\n", msg);
parseMessage(&msg, 12);
}
输出:
msg: 1|david|pwd|
value: �[
我很难找出代码中的错误。
parseMessage(&msg, 12);
应该是 parseMessage(msg, 12);
&msg
意味着您正在传递一个指向 msg 的指针,当函数只需要一个 char *
char **
&msg
产生 char **
或 指向字符的指针 .
您的 parseMessage
函数和 printf
说明符 %s
都需要 char *
.
这里不需要address-of operator
parseMessage(msg, 12);
函数的第一个参数parseMessage
和用作该参数参数的表达式具有不同的类型。
参数声明为 char *
user_message* parseMessage(char *incoming_msg, uint64_t size)
而用作参数的表达式的类型为 char **
。
char* msg = "1|david|pwd|";
//...
parseMessage(&msg, 12);
所以实际上你不是输出指针指向的字符串msg
,而是试图将变量msg占用的内存中存储的内容及其后面的内容作为字符串输出
你至少需要像这样调用函数
parseMessage( msg, 12 );
此外,如果传递的字符串在函数内未更改,至少用限定符 const
声明第一个函数参数会更好
user_message* parseMessage( const char *incoming_msg, uint64_t size);