printf表现得很奇怪

时间:2012-12-12 17:41:35

标签: c printf

我有一个简单的程序,应该打印一个字符串。但我没有得到预期的输出。谁能告诉我这个程序有什么问题?

这是我的代码:

main()
{
   char arr[] = "Test_string";
   printf("%20s"+1,arr);
   return 0;
}

output: 20s

预期输出为:Test_string

"Test_string"在20个地方打印,因为我们将"%20s"作为格式说明符。

2 个答案:

答案 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)

删除格式字符串

旁边的+1
printf("%20s",arr);