gpt4 book ai didi

c - printf 样式格式化而不输出

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

我想做的是使用类似于 printf 的语法创建一个新的 char*:

char* myNewString = XXXXprintf("My string says %s", myFirstString);

如果不打印到输出流是否可行?

最佳答案

您正在寻找 sprintfsnprintf 函数。

请注意,sprintf 不会返回指向新分配的字符串的指针;你必须自己分配字符串,并确保它足够大:

char target[100];
sprintf(target, "My string says %s", myFirstString);

除非您可以确定目标足够大,否则您应该使用snprintf,它限制复制到目标字符串的字节数。

snprintf 返回本应写入目标字符串的字符数。您可以使用空目标和零大小调用 snprintf 来找出需要多少大缓冲区,然后分配缓冲区并再次调用它以写入目标(注意:我的原始代码示例有一个差一错误。)

#include <stdio.h>
#include <stdlib.h>

int main(void) {
const char *myFirstString = "hello, world";
char *target;
size_t size = snprintf(NULL, 0, "My string says %s", myFirstString);
target = malloc(size+1); /* +1 for terminating '\0' */
if (target == NULL) {
fprintf(stderr, "Allocation failed\n");
exit(EXIT_FAILURE);
}
size = snprintf(target, size+1, "My string says %s", myFirstString);
printf("target = \"%s\"\n", target);
return 0;
}

请注意,1999 年的 ISO 标准将 snprintf 添加到 C 中。微软的编译器似乎不支持它;它确实提供了一个调用 _snprintf 的函数,可能 做同样的事情。

还有一个名为 asprintf 的 GNU 扩展,它会为您分配字符串:

char *target;
asprintf(&target, "My string says %s", myFirstString);

如果你使用它,你必须稍后使用 free() 来释放字符串。由于这是一个 GNU 扩展,它会降低您的代码的可移植性。

关于c - printf 样式格式化而不输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12288014/

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