char指针如何成为整个字符串?

jki*_*gel 1 c string pointers char char-pointer

假设我有以下字符串:

char *my_string = "Stack";
Run Code Online (Sandbox Code Playgroud)

据我所知,它char *保存了字符串第一个字符的内存地址"Stack".在计算机内存中,它可能表示如下:

 ------------------------
| S | t | a | c | k | \0|
 ------------------------
  ^
  my_string
Run Code Online (Sandbox Code Playgroud)

如果我打电话:printf("%s\n", my_string);,则打印整个字符串.编译器如何知道打印整个字符串?据我了解,它只有一个字符的地址.

小智 7

char*确实仅指向您的字符串的第一个字符,但是功能类似于printf("%s")将简单地开始阅读和继续下去,直到他们找到一个0字节.像你的"Stack"例子这样的字符串文字在默认情况下是零终止的,因此printf会知道打印你的字符串并在此之后停止.


Ker*_* SB 6

除了编译程序之外,编译器不会执行任何操作.

库函数printf,但是,提出了如下的要求,以你(且正好满足了这一要求):当给定的格式说明%s,相应的参数必须是类型的char *,并且被假定为指向的零封端的所述第一元件字符数组.然后,该函数将打印出该数组的连续元素,直到它达到零字节.