C#, C♯, C#相談室 Part77
■ このスレッドは過去ログ倉庫に格納されています
0006デフォルトの名無しさん
2012/11/10(土) 09:24:15.51public static extern int sprintf(byte[] buffer, string format);
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "sprintf")]
public static extern int sprintf(byte[] buffer, string format, __arglist);
public static int printf(string format, params object[] args)
{
byte[] buffer = new byte[10000];
int result = 0;
switch (args.Length)
{
case 0: result = sprintf(buffer, format); break;
case 1: result = sprintf(buffer, format, __arglist(args[0])); break;
case 2: result = sprintf(buffer, format, __arglist(args[0], args[1])); break;
case 3: result = sprintf(buffer, format, __arglist(args[0], args[1], args[2])); break;
default: result = sprintf(buffer, format, __arglist(args[0], args[1], args[2])); break;
}
string str = System.Text.Encoding.ASCII.GetString(buffer, 0, result);
Console.Write(str);
return result;
}
public static void Main(string[] args)
{
int i = 123;
string s = "abc";
printf("c %d %d %d\n", i, s, "def");//1
printf("d %d %d %d\n", i.ToString(), s, "ghi");//2
printf("e %s %s %s\n", i.ToString(), s, "ghi");//3
Console.ReadLine();
}
こんな感じでsprintf使ってprintfっぽいのを作りたいんだけど
1や2では出力がおかしくって3ではAccessViolationExceptionが発生する
どうすればいい?
■ このスレッドは過去ログ倉庫に格納されています