我一直在使用C#的最近幾年,現在我正在努力寫一些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必須在GCC for Linux和Visual Studio for Windows(C90)上工作。
看看vsprintf中 - http://msdn.microsoft.com/en-us/library/28d5ce15(v=vs.71).aspx – OldProgrammer 2013-02-10 22:51:58
當你編譯並會發生什麼運行你給的代碼?你有任何錯誤? – 2013-02-10 22:55:33
我不認爲你想要什麼是可能的一步。你可能想要運行一個循環和'sprintf()'然後''strcat()'。另外,請使用'snprintf()'而不是'sprintf()' - 它有點減少了緩衝區溢出錯誤的可能性。 – 2013-02-10 22:55:58