我期待编译错误,考虑到必须在%p中分配一个指针,但是当我有意将一个指针指向%s时,下面的代码不会给出错误。通过添加&符号&,右边它应该生成数组的地址并将内存地址分配给%p,而不是给出字符串的值。除非我取消引用指针,但是我根本不解引用指针,我从来没有在printf中的my_pointer前面加上星号*。指定字符串类型的指针类型
#include <stdio.h>
int main()
{
char words[] = "Daddy\0Mommy\0Me\0";
char *my_pointer;
my_pointer = &words[0];
printf("%s \n", my_pointer);
return 0;
}
请看看这个:
printf("%s \n", my_pointer);
我的理解是,* my_pointer(带*号)应该给我的字符串值。 但my_pointer(不带星号)不应该给我的字符串的值,但它应该只给我的内存地址,但是当我运行这个代码时,我得到了字符串eventhough的值,但我没有把星号*在前面。我希望这一次让我自己清醒。
您不能“分配”指向“printf”格式说明符的指针; '%s'想要一个'char *',这就是你给它的。 – szczurcio
我没有看到什么似乎是问题。 %s表示const char *参数 –