gpt4 book ai didi

c - 如何从 C 中的值数组格式化字符串?

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

过去几年我一直在使用 C#,现在我正在尝试编写一些 C。我正在尝试从值数组格式化字符串。 “格式字符串”和数组直到运行时才知道。

在 C# 中,我可以使用数组调用可变参数函数,如下所示:

using System;

namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
string formatString = "{0}.{1}.{2}.{3}";
string[] formatValues = new[] { "a", "b", "c", "d" };

string formatted = String.Format(formatString, formatValues);

//Do something with formatted (now looks like "a.b.c.d")
}
}
}

在 C 中我有这个:

#include <stdio.h>
#include <malloc.h>

int main(int argc, char* argv[])
{
char *formatString = "%s.%s.%s.%s";
char *formatValues[] = {"a","b","c","d"};

char *buffer = (char*)malloc(100 * sizeof(char));

//This doesn't work.....
sprintf(buffer, formatString, formatValues);

//... buffer is junk

return 0;
}

我如何在 C 中执行此操作?

(C 标准库中是否有一个很好的函数可以帮助我,或者是否有一种方法可以使用数组调用可变参数函数?)

请注意,参数的数量永远不会大于我拥有的数组的长度。并且类型将始终是字符串。所以我可能有

char *formatString = "My Formatted String %s.%s.%s";
char *formatValues[] = {"a","b","c","d","e"};

但我的 %s 永远不会太少。

注意:C 必须在适用于 Linux 的 GCC 和适用于 Windows (C90) 的 Visual Studio 上运行。

最佳答案

我不认为 C 提供了一种标准化的方法来做到这一点。如果你了解 <stdarg.h> 的内部实现在您的系统上,可能会拼凑出一个涉及vprintf(3) 的特定于系统的解决方案, 但我有一个不同的、符合要求的拼凑...

可行的方法是声明一个大数组,设置你拥有的值,然后在调用点传递数组的每个元素,不管它们是否是设置。

char *a[5]; // or a[50], whatever you need

// assign the elements you actually have

printf(format_string, a[0], a[1], a[2], a[3], a[4], a[5]);

关于c - 如何从 C 中的值数组格式化字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803464/

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