警告:格式“%s”需要类型为 'char *' 的参数,但参数 2 的类型为 'int'
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int'
我有这个程序声称可以将十进制数转换为十六进制数。问题是程序抛出上述警告,我不知道如何纠正它。 return(变量标识符)应该是一个 %s
因为你想显示的是一个字符串。
#include <stdio.h>
int main() {
int n = 0;
char hex = '[=12=]';
const char * HEX_DIG = "0123456789ABCDEF";
printf ("Enter a positive integer: ");
scanf ("%d",&n);
do{
hex = HEX_DIG [n % 16] + hex;
n = (int) n/16;
}while ( n != 0 );
printf ("\nHexadecimal= %s", hex);
return 0;
}
%s
格式标记需要一个字符串,在 C 语言中,它是一个 指向 一个 char
的指针(或 char
的数组=13=]s)。您已经为它提供了一个 char
,当它传递给带有可变参数的函数(在本例中为 printf
)时,它会被提升为一个 int
。这就是编译器所抱怨的。
此外,即使您的代码是有效的 C 代码,您也会向后打印整数。
要打印 char
,您需要使用 %c
。将其合并到现有代码中的最佳方法是将 printf
移动到循环内:
for (int k=0; k<sizeof(int)*2; k++) {
hex = HEX_DIG[(n >> (sizeof(int)*8-4)) & 0xf]; // Move the high four bits all the way to the right and then mask them off.
n <<= 4; // Shift the next four bits into place.
if ( hex != '0' ) { // No need to print leading 0's.
printf("%c", hex);
}
}
printf("\n");
为了解释 sizeof
计算,我们假设 int
的宽度为 four-bytes。然后 sizeof(int)*2
将是八个,它占八组四位。 sizeof(int)*8-4
将是 28,因此我们将移出所有 32 位,除了四个最高位。
请注意,此代码会忽略 n
为零的情况。在这种情况下,循环不会打印任何内容。
稍微备份一下,除非您将其作为练习(也许是作业问题),否则我建议您不要重新发明轮子,因为 printf
已经支持以十六进制格式打印整数:
printf("%x\n", n);
我有这个程序声称可以将十进制数转换为十六进制数。问题是程序抛出上述警告,我不知道如何纠正它。 return(变量标识符)应该是一个 %s
因为你想显示的是一个字符串。
#include <stdio.h>
int main() {
int n = 0;
char hex = '[=12=]';
const char * HEX_DIG = "0123456789ABCDEF";
printf ("Enter a positive integer: ");
scanf ("%d",&n);
do{
hex = HEX_DIG [n % 16] + hex;
n = (int) n/16;
}while ( n != 0 );
printf ("\nHexadecimal= %s", hex);
return 0;
}
%s
格式标记需要一个字符串,在 C 语言中,它是一个 指向 一个 char
的指针(或 char
的数组=13=]s)。您已经为它提供了一个 char
,当它传递给带有可变参数的函数(在本例中为 printf
)时,它会被提升为一个 int
。这就是编译器所抱怨的。
此外,即使您的代码是有效的 C 代码,您也会向后打印整数。
要打印 char
,您需要使用 %c
。将其合并到现有代码中的最佳方法是将 printf
移动到循环内:
for (int k=0; k<sizeof(int)*2; k++) {
hex = HEX_DIG[(n >> (sizeof(int)*8-4)) & 0xf]; // Move the high four bits all the way to the right and then mask them off.
n <<= 4; // Shift the next four bits into place.
if ( hex != '0' ) { // No need to print leading 0's.
printf("%c", hex);
}
}
printf("\n");
为了解释 sizeof
计算,我们假设 int
的宽度为 four-bytes。然后 sizeof(int)*2
将是八个,它占八组四位。 sizeof(int)*8-4
将是 28,因此我们将移出所有 32 位,除了四个最高位。
请注意,此代码会忽略 n
为零的情况。在这种情况下,循环不会打印任何内容。
稍微备份一下,除非您将其作为练习(也许是作业问题),否则我建议您不要重新发明轮子,因为 printf
已经支持以十六进制格式打印整数:
printf("%x\n", n);