我知道指针和彼此完全相同。如果我使用%c然后循环遍历字符串的所有值,下面的程序显示错误然后我看到没有错误但是%s我得到一个错误。 此外,如果我使用数组我的指针和使用arr []与我看到一个错误。像arr [] ="你好"然后使用printf("%s",arr []); .......我也看到了一个错误。这有什么不对?
#include <stdio.h>
#include <stdlib.h>
main()
{
char *ptr = "Hello";
printf("%d\n", ptr);
printf("%s\n", *ptr);
return 0;
}
答案 0 :(得分:3)
printf
的两次调用都会导致未定义的行为:
%d
打印的参数的指针char
)传递给%s
也是未定义的行为。它可能会导致崩溃,因为非指针被取消引用。为了打印指针的值,将指针强制转换为void*
,并使用%p
格式说明符:
printf("%p\n", ptr);
要打印字符串,请将ptr
而不是*ptr
传递给带%s
格式说明符的参数:
printf("%s\n", ptr);