我正在try 使用一个变量在一个printf()格式说明符中设置一个有点动态的字段宽度.我在网站上搜索了一下,发现以下内容似乎正是我所需要的帮助.
Set variable text column width in printf个
当我使用"%*1$d%*2$S"时,我得到以下错误.
ex8_3.c:29:11: warning: missing $ operand number in format [-Wformat=]
29 | printf("The value entered, in characters, was \"%*1$d%*2$s\".\n", fieldWidth, string);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但是,当我使用"%1$*d%2$*S"时,我得到以下错误.
ex8_3.c: In function ‘main’:
ex8_3.c:29:4: warning: missing $ operand number in format [-Wformat=]
29 | printf("The value entered, in characters, was \"%1$*d%2$*s\".\n", fieldWidth, string);
| ^~~~~~
请注意两个语句中星号的不同位置. 根据编译器的说法,第二个版本似乎是"更正确的"版本.在这两种情况下,我都不理解的是错误消息中提到的"缺少$操作数".Printf()使用两个变量,我提供了两个"$OPERAND NUMBER"的实例.给出上面链接的网页中的例子,我就是看不出我做错了什么/没有理解.谁能解释一下错误消息指的是什么,以及我需要实施哪些更正?
以下是有问题的代码.
int main(void)
{
int number = 0; // Value supplied by user.
int arraySize; // Size of the digit array.
int fieldWidth = 0; // Allow variable field width in printf().
number = readValue(); // Read in value from user.
arraySize = countDigits(number) + 2; // Get array size.
fieldWidth = arraySize + 2; // Set variable field width for printf().
char string[arraySize]; // Define array to hold digit characters.
itoa(number, string); // Convert value to string.
printf("The value entered, in characters, was \"%1$*d%2$*s\".\n", fieldWidth, string);
return 0;
}
以下是正在使用的命令行.
gcc ex8_3.c -Wall -std=c11 -ggdb -o ex8_3