我有一个简单的程序,应该打印一个字符串。但我没有得到预期的输出。谁能告诉我这个程序有什么问题?
这是我的代码:
main()
{
char arr[] = "Test_string";
printf("%20s"+1,arr);
return 0;
}
output: 20s
预期输出为:Test_string
"Test_string"
在20个地方打印,因为我们将"%20s"
作为格式说明符。
答案 0 :(得分:6)
如果您仔细查看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 :(得分:3)
删除格式字符串
旁边的+1printf("%20s",arr);