我有一个简单的程序,应该打印一个字符串.但我没有得到预期的输出.谁能告诉我这个程序有什么问题?
这是我的代码:
main()
{
char arr[] = "Test_string";
printf("%20s"+1,arr);
return 0;
}
output: 20s
Run Code Online (Sandbox Code Playgroud)
预期产出是: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);
Run Code Online (Sandbox Code Playgroud)
同样printf("%20s"+1,arr);相当于:
const char * ptr = "%20s";
printf(ptr+1,arr);
Run Code Online (Sandbox Code Playgroud)
因为您正在传递"%20s"+1,传递给printf的实际指针指向一个字符串"20s".