我遇到了 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
的第一个参数和用作该参数参数的表达式具有不同的类型。
参数被声明为类型 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);
关于C char* printf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70427365/