Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字符中的变量占位符*_C - Fatal编程技术网

C 字符中的变量占位符*

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

我有以下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: 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编译器。