2

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

这是我的代码:

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

output: 20s

预期输出为:Test_string

"Test_string"正如我们"%20s"作为格式说明符提供的那样,在 20 个地方打印。

4

2 回答 2

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"

于 2012-12-12T17:43:13.263 回答
3

删除格式字符串旁边的 +1

printf("%20s",arr);
于 2012-12-12T17:43:31.300 回答