【问题标题】:What is C# analog of C snprintf()?什么是 C snprintf() 的 C# 模拟?
【发布时间】:2010-07-24 23:30:24
【问题描述】:

什么是 C snprintf() 的 C# 模拟?

在C code here we use

 snprintf(buf, sizeof(buf), outfilename, frame);

它的确切类比是什么?

【问题讨论】:

    标签: c# c translation printf


    【解决方案1】:

    StringBuilder.AppendFormat String.Format 是最接近的。它执行相同的操作,但请注意格式字符串为in a different format。

    使用String.Format:

    string buf = string.Format("{0}", frame);
    

    使用StringBuilder.AppendFormat:

    StringBuilder builder = new StringBuilder();
    builder.AppendFormat("{0}", frame);
    

    【讨论】:

      【解决方案2】:

      最基本的版本是String.Format。

      string result = String.Format(format, arg0, arg1, ..., argn);
      

      但许多其他类也支持类似的东西,包括派生自TextWriter 的所有类。这个问题有一些例子Which methods in the 3.5 framework have a String.Format-like signature?

      • Console.Write
      • StreamWriter.Write
      • StringWriter.Write
      • StringBuilder.AppendFormat
      • 还有更多...

      【讨论】:

        【解决方案3】:

        如果要分配给字符串,请使用 String.Format

        var newString = String.Format("Number: {0}", 10);
        

        如果您要附加大量字符串,请使用 StringBuilder.AppendFormat。从长远来看,它会为您节省空间,因为它们可以被链接起来,从而节省空间。

        var result = new StringBuilder().AppendFormat("{0}", 10).AppendFormat("{0}", 11).ToString();
        

        【讨论】:

          【解决方案4】:

          它的确切类比是什么?

          没有确切的类比,因为:

          1. C 和 C# 中的字符串的实现方式不同。在 C 中,字符串是可变的字符数组,而在 .NET 中,它们是不可变的对象实例。因此,在 .NET 中,您不会像 snprintf 那样“写入缓冲区”,您只需创建一个全新的字符串

          2. .NET 中使用的格式字符串(String.Format、Console.WriteLine 等)与 C 非常不同(不同的占位符格式)

          正如其他答案中提到的,最接近的等价物是String.Format,但它绝对不是一个精确的模拟

          【讨论】:

            猜你喜欢
            • 2011-03-20
            • 2023-03-28
            • 2017-11-03
            • 1970-01-01
            • 2017-05-08
            • 1970-01-01
            • 2018-01-11
            • 2013-07-08
            • 1970-01-01
            相关资源
            最近更新 更多