我有一个简单的程序,它应该打印一个字符串。但我没有得到预期的输出。谁能告诉我程序有什么问题?
这是我的代码:
main()
{
char arr[] = "Test_string";
printf("%20s"+1,arr);
return 0;
}
output: 20s
预期输出为:Test_string
"Test_string"
正如我们"%20s"
作为格式说明符提供的那样,在 20 个地方打印。
如果您仔细查看您的printf
电话,这非常简单。
这是printf的原型:int printf(const char *format, ...);
。
printf
需要一个指向格式化字符串的指针作为第一个参数。在您的程序中,您传递了一个指向此字符串的指针:"20s"
并printf
立即打印您传递的内容。
让我解释一下为什么传递的指针指向"20s"
而不是"%20s"
。
C 中带引号的字符串被解释为字符指针。
字符数组,当传递给函数时,会衰减为指针。
printf("%20s",arr);
相当于:
const char * ptr = "%20s";
printf(ptr,arr);
同样printf("%20s"+1,arr);
等价于:
const char * ptr = "%20s";
printf(ptr+1,arr);
因为您正在传递"%20s"+1
,所以传递给 printf 的实际指针指向一个字符串"20s"
。
删除格式字符串旁边的 +1
printf("%20s",arr);