Я использую C# в течение последних нескольких лет, и сейчас я пытаюсь написать C. Я пытаюсь отформатировать строку из массива значений. «Строка формата» и массив неизвестны до времени выполнения.Как форматировать строку из массива значений в C?
В C# я могу вызвать функцию VARIADIC с массивом, например:
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 должен работать на GCC для Linux и Visual Studio для Windows (C90).
Посмотрите на vsprintf - http://msdn.microsoft.com/en-us/library/28d5ce15(v=vs.71).aspx – OldProgrammer
Что происходит при компиляции и запустить код, который вы дали? Вы получаете какие-либо ошибки? –
Я не думаю, что вы хотите в один шаг. Возможно, вы захотите запустить цикл и 'sprintf()', а затем 'strcat()'. Кроме того, используйте 'snprintf()' вместо 'sprintf()' - это несколько уменьшает вероятность ошибок переполнения буфера. – 2013-02-10 22:55:58