C 字符中的变量占位符*
我有以下C示例: 如何将姓名和年龄作为消息中的参数 Pseudo codemessage=你好,我是{name},age{age} 更新 我从评论中尝试了以下示例:C 字符中的变量占位符*,c,C,我有以下C示例: 如何将姓名和年龄作为消息中的参数 Pseudo codemessage=你好,我是{name},age{age} 更新 我从评论中尝试了以下示例: char *body = "{ \"capabilities\": {},\"desiredCapabilities\": {}}"; int content_length = sizeof(body); char *format = "POST /session HTTP/1.1\r\nContent-Type: applica
char *body = "{ \"capabilities\": {},\"desiredCapabilities\": {}}";
int content_length = sizeof(body);
char *format = "POST /session HTTP/1.1\r\nContent-Type: application/json\r\nContent-Length:%d\r\n\r\n%s";
int len = snprintf(NULL, 0, format, content_length, body);
char *message = malloc(len + 1);
snprintf(message, len + 1, format, content_length, body);
但我在char*message=malloclen+1;处出错:
错误:从“void*”到“char*”的转换无效[-fppermissive]|您可以使用snprintf执行此操作。这与printf类似,但将结果放入字符串中,而不是将其写入标准输出
请注意,此示例使用固定大小的缓冲区。如果要动态分配空间,可以执行以下操作:
const char *format = "Hello, I am %s, age %d";
int len = strlen(format) + strlen(name) + sizeof(age)*3 + 1;
char *message = malloc(len);
snprintf(message, len, "Hello, I am %s, age %d", name, age);
// ...
free(message);
这为格式字符串、每个参数和终止的空字节留出了空间
获取所需长度的另一种方法是调用snprintf两次,第一次使用NULL表示字符串,0表示大小。返回值是结果字符串的长度:
const char *format = "Hello, I am %s, age %d";
int len = snprintf(NULL, 0, "Hello, I am %s, age %d", name, age);
char *message = malloc(len + 1);
snprintf(message, len + 1, "Hello, I am %s, age %d", name, age);
// ...
free(message);
关于更新代码中的错误,显然使用C++编译器而不是C编译器。如果您正在编写C,请使用C编译器。您可以使用snprintf来完成这项工作。这与printf类似,但将结果放入字符串中,而不是将其写入标准输出
请注意,此示例使用固定大小的缓冲区。如果要动态分配空间,可以执行以下操作:
const char *format = "Hello, I am %s, age %d";
int len = strlen(format) + strlen(name) + sizeof(age)*3 + 1;
char *message = malloc(len);
snprintf(message, len, "Hello, I am %s, age %d", name, age);
// ...
free(message);
这为格式字符串、每个参数和终止的空字节留出了空间
获取所需长度的另一种方法是调用snprintf两次,第一次使用NULL表示字符串,0表示大小。返回值是结果字符串的长度:
const char *format = "Hello, I am %s, age %d";
int len = snprintf(NULL, 0, "Hello, I am %s, age %d", name, age);
char *message = malloc(len + 1);
snprintf(message, len + 1, "Hello, I am %s, age %d", name, age);
// ...
free(message);
关于更新代码中的错误,显然使用C++编译器而不是C编译器。如果你写C,使用C编译器。< /P> C或C++?此外,如果C++可以使用STD::String?使用STD::string。然后可以使用+运算符和std::to_string.Just char*name=John;应该给出一个警告,因为它是一个字符常量*如果在C中,您知道如何使用printf输出它吗?你听说过吗?“不幸的是,在C中,无效的Itoc必须为C或C++提供额外的警告。此外,如果C++可以使用STD::String?使用STD::string。然后可以使用+运算符和std::to_string.Just char*name=John;应该给出一个警告,因为它是一个字符常量*如果在C中,您知道如何使用printf输出它吗?你听说过吗?@AntoineMorrier在C中不是无效的不幸的是,IIRC one必须为此启用额外的警告。你不需要-1;snprintf解释了终止null。也许你可以说他可以动态分配内存malloc@CuriousGuy:您必须使用malloc或calloc为最终字符串留出空间,并将结果指针分配给消息。注意:您可以不进行handish长度计算并调用len=snprintfNULL, 0, ... 为了获得所需的长度,不包括终止空。这次CuriousGuy使用C++编译器代替C编译器。你不需要-- 1;snprintf解释了终止null。也许你可以说他可以动态分配内存malloc@CuriousGuy:您必须使用malloc或calloc为最终字符串留出空间,并将结果指针分配给消息。注意:您可以不进行handish长度计算并调用len=snprintfNULL, 0, ... 为了获得所需的长度,不包括终止空。这次CuriousGuy使用C++编译器代替C编译器。