printf("%*。* s",int,int,char *)在c中的含义是什么?

时间:2015-06-19 09:07:35

标签: c printf format-specifiers

我有一个代码片段,其中有一个声明

printf("%*.*s");

%*.*s是什么意思?

代码是

char *c="**********";
int i,n=4;
for(i=1;i<=n;i++)
{
printf("%*.*s\n",i,i,c);
}

输出是:

*
**
***
****

4 个答案:

答案 0 :(得分:6)

阅读printf的规范:

  

Focus

     

%[flags][width][.precision][length]specifier字符串

     

s宽度未在格式字符串中指定,而是作为必须格式化的参数前面的附加整数值参数。

对于字符串,宽度为要打印的最小字符数(可以添加填充)。

  

*未在格式字符串中指定精度,但作为必须格式化的参数前面的附加整数值参数。

对于字符串,精确度是要打印的最大字符数。

您的程序未传递必需的可选参数(witdh,precission,要打印的字符串)。行为将是未定义的(可能是崩溃)。

答案 1 :(得分:4)

首先,让我澄清一下,此处格式字符串中的<input type="text" name="search" id="search"> <div class="row carousel-row lss"> <div class="col-xs-8 col-xs-offset-2 slide-row"> <div id="carousel-1" class="carousel slide slide-carousel" data-ride="carousel"> <!-- Indicators --> <!-- <ol class="carousel-indicators lsse"> <li data-target="#carousel-1" data-slide-to="0" class="active"></li> <li data-target="#carousel-1" data-slide-to="1"></li> <li data-target="#carousel-1" data-slide-to="2"></li> </ol> --> <!-- Wrapper for slides --> <div class="carousel-inner"> <div class="item active"> <img src="uploads/<?php echo $viewjobregisterid; ?>/<?php echo $viewjobsid; ?>/<?php echo $imagefile5; ?>" alt="Image" style="width: 500px;height: 186px;"> </div> </div> </div> <div class="slide-content"> <h4><?php echo $myjobs1["title"]; ?></h4> <p><?php echo $myjobs1["description"]; ?></p> </div> <div class="slide-footer"> <span class="pull-right buttons"> <button class="btn btn-sm btn-info" onclick="relocateTo('jobtitle.php?jobtitleid=<?php echo $myjobs1["viewjobsid"]; ?>')">View Job</button> </span> </div> </div> </div> 不适用于打印* charcater(s)本身。在这种情况下,它们确实具有特殊意义。

在你的情况下,

*

第一个 printf("%*.*s"); 字段宽度,第二个*一个(确切地说,*)表示精度。

.*都需要一个*参数来提供相应的值。

引用标准,

  

如上所述,字段宽度或精度或两者可以用星号表示。在这种情况下,int参数提供字段宽度或精度。指定字段宽度或精度或两者的参数应在要转换的参数(如果有)之前(按此顺序)出现。负字段宽度参数被视为 - 标志,后跟正字段宽度。使用负精度参数,就好像省略了精度一样。

因此,要显示的转换说明符的通用表单是

int

请注意 %[flags]<field width><precision><length modifier>[conversion specifier character] 中的所有元素都是可选的,只有<>[flags]是强制性的。也就是说,要求说

  

零个或多个标志

因此,基本上使[conversion specifier character]也可选。

有关详细信息,请参阅[flags]标准,章节§7.21.6.1。

答案 2 :(得分:3)

您需要将此语句的3个参数传递为printf("%*.*s",a,b,str);,其中ab为整数,str为字符串。

它打印ab个字符,其中strb个字符为输出的最后b-a个字符。首先 Private Sub sbloadBlog() Try Dim unqstr As String = Request.QueryString("id").ToString() unqstr = unqstr.Substring(0, unqstr.IndexOf("-")) Dim x As String = "select distinct Title as url, img, blog_desc from Blog_Gallery_AYS where unqid ='" + unqstr + "'" Dim dt As New DataTable dt = Dal.GettDS(x).Tables(0) x = "" x += "<p>" For Each dr As DataRow In dt.Rows x += "<h2>'" + dr("url") + "'</h2>" x += "<p>'" + dr("blog_desc") + "' </h2>" x += "</br>" x += "</br>" x += "<img src='" + dr("img").ToString().Replace("~/", "") + "'/>" Next x += "</p>" x += x.Replace("'", """") divblogdetail.InnerHtml = x Catch ex As Exception End Try End Sub Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not Request.QueryString("id") Is Nothing Then sbloadBlog() End If End Sub 个字符为空格(&#39;&#39;)。

答案 3 :(得分:0)

。*未在格式字符串中指定精度,但作为必须格式化的参数之前的附加整数值参数。

printf(&#34;%。* s \ n&#34;,20,&#34; rabi&#34;);