【发布时间】:2017-10-21 19:08:09
【问题描述】:
这个sn-p代码的输出:
char* str1 = "suchString";
printf("%s %s\n", &"suchString", &str1);
是:
suchString �WO:+(或任何未知符号)
有什么区别,为什么输出不一样?
编辑 如果您尝试按如下方式消除 & 运算符:
char* str1 = "suchString";
printf("%s %s\n", "suchString", &str1);
输出与代码的第一个 sn-p 相同。 那么,"suchString" 和 &"suchString" 是一样的吗?
【问题讨论】:
-
为什么要提供
char**,指针的地址,作为%s占位符的参数?老实说,我很惊讶第一个论点竟然奏效了。 -
您应该使用所有警告和调试信息进行编译:
gcc -Wall -Wextra -gwith [GCC](htttp://gcc.gnu.org/)。你会收到警告 -
这是一个测验,但我不知道为什么 &"suchString" 不打印 &str1 之类的地址
-
因为字符串字面量是数组,而不是指针。
-
@tadman:你说得对,我没有仔细阅读。
printf调用中的三个参数(包括格式字符串)的类型为char*(在数组到指针衰减之后)、char(*)[11]和char**。第二个和第三个参数都需要是char*类型。
标签: c string pointers memory-address c-strings