[英]sprintf format specifier replace by nothing
我目前在想是否有辦法使用sprintf替換格式說明符%u而不用
我的問題是在sprintf中使用三元運算符,該運算符將%u替換為值或不替換任何內容。
這是我要執行的操作的一個示例:
int main (void)
{
char mytab[10]={'\0'};
uint_32 i=0;
scanf("%u",&i);
sprintf(mytab, "\"%u"\",i>0?i:/*Here is the syntax I want to find if it exists*/);
printf("%s\r\n",mytab);
return 0;
}
我嘗試獲取的代碼結果例如是:如果輸入為1,則為“ 1”(如果輸入為2 ...,則為“ 2”),如果輸入為0,則為“”。
您對此有什么想法或看法嗎? 預先感謝。
我認為您應該將三進制運算符放在格式字符串上,根據i的值選擇使用"%u"
或""
。
sprintf(mytab, i? "\"%u\"" : "\"\"", i);
修改此語句
sprintf(mytab, "\"%u"\",i>0?i:/*Here is the syntax I want to find if it exists*/);
這就是你所需要的。
(i>0)? sprintf(mytab, "%u",i) : sprintf(mytab,"%s","") ;
編輯
建議使用H2CO3
您也可以這種方式使用。
if (i > 0)
sprintf(mytab, "%"PRIu32, i);
else
sprintf(mytab,"%s","");
另請注意, %u
不是uint32_t
的適當格式說明符,請使用"%"PRIu32
(i>0)? sprintf(mytab, "%"PRIu32,i) : sprintf(mytab,"%s","") ;
我認為簡單的if
語句仍然是最干凈的選擇:
char mytab[10] = "\"\"";
if (n > 0) {
snprintf(mytab, sizeof mytab, "\"%" PRIu32 "\"", n);
}
您可能(不是?)喜歡使用這個骯臟的把戲* 1 (這會使gcc大喊警告):
char mytab[11] = "";
uint32_t i = 0;
int result = scanf("%"SCNu32, &i);
if (1 != result)
{
if (-1 == result)
{
if (errno)
{
perror("scanf() failed");
}
else
{
fprintf(stderr, "EOF reached\n");
}
}
else
{
fprintf(stderr, "invalid input\n");
}
}
sprintf(mytab, i>0 ?"%"PRIu32 :"%s", i>0 ?i :"");
printf("%s", mytab);
* 1明確提及這一點:在此上下文中,“臟”是暗示這可能會調用神話般的Undefined Behaviour。 因此, 請勿在生產中這樣做 !
理智的方法是:
...
if (i)
{
sprintf(mytab, "%"PRIu32, i);
}
printf("%s", mytab);
請注意,盡管十進制格式的無符號32位數字的最大位數為10,但仍需要為0
終止符保留一個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.