gpt4 book ai didi

C char* printf 问题

转载 作者:行者123 更新时间:2023-12-02 18:24:22 24 4
gpt4 key购买 nike

我遇到了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com