为什么这个“%s”不允许指针内的值?

时间:2014-08-09 22:23:19

标签: c pointers printf

我知道指针和彼此完全相同。如果我使用%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;
}

1 个答案:

答案 0 :(得分:3)

printf的两次调用都会导致未定义的行为:

  • 不允许传递用%d打印的参数的指针
  • 将非指针(在本例中为char)传递给%s也是未定义的行为。它可能会导致崩溃,因为非指针被取消引用。

为了打印指针的值,将指针强制转换为void*,并使用%p格式说明符:

printf("%p\n", ptr);

要打印字符串,请将ptr而不是*ptr传递给带%s格式说明符的参数:

printf("%s\n", ptr);