gpt4 book ai didi

c - %s 和 %c 格式说明符有什么区别?

转载 作者:行者123 更新时间:2023-11-30 18:21:29 25 4
gpt4 key购买 nike

据我所知%c需要 int 值(因为 charC 中被视为整数),并且 %s预计 char *作为参数,但我的疑问是,%s 是否需要指向字符 block 的指针?它可以指向双引号中的单个字符吗?

例如:

char * s = "string"; 
printf("%s",s);// output: string

编译器如何找出字符串所在的内存块并以 '\0' 结尾?.

最佳答案

双引号中的单个字符仍然是 C 字符串,实际上包含两个字符:单个字符加上终止空字符:

char const* str = "a"; // actually points to an array { 'a', '\0' }

所以你仍然将它与%s一起使用。实际上,如果您取消引用字符串,您也可以将它与 %c 一起使用:

printf("%c\n", *str);
// ^

您可以使用任何 C 字符串(空字符串“”除外)来执行此操作,但只会打印第一个字符...

针对您的评论添加内容:

函数调用(至少使用 cdecl 和 stdcall 调用约定)是通过将函数参数放入堆栈来完成的(在大多数现代系统上,小于 int 的类型在堆栈上提升为 int)。 printf 然后简单地解析格式字符串,如果它发现 %s,它将把堆栈上的下一个 sizeof(void*) 字节解释为指向以 null 结尾的字符串的指针(因此直接传递str),如果它发现%c,它会直接从堆栈中读取一个字符——所以你需要在那里放置一个字符而不是指针,因此你需要取消引用。

关于c - %s 和 %c 格式说明符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43430078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com