【问题标题】:Why is this "%s" not allowed with value inside of pointer?为什么指针内的值不允许这个“%s”?
【发布时间】:2014-08-09 22:23:19
【问题描述】:

我知道那个指针和彼此完全一样。如果我使用 %c 然后循环遍历字符串的所有值,下面的程序会显示一个错误,然后我看不到任何错误,但是使用 %s 我得到一个错误。 此外,如果我使用数组我放置指针并使用 arr[],我会看到一个错误。像 arr[] = "Hello" 然后使用 printf("%s", arr[]); .......我也看到了一个错误。这里有什么问题?

#include <stdio.h>
#include <stdlib.h>

main()
{
char *ptr = "Hello";

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

return 0;
}

【问题讨论】:

  • 堆栈溢出经验法则 #2:如果 OP 断言“我知道”,他不会。
  • “我知道那个指针和____完全一样”。这里是不是少了一个字?另外,第二句话是否缺少一些标点符号,因为它似乎是说程序显示错误但您没有看到错误?

标签: c pointers printf


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 导致非指针非法解引用?不,你和其他人一样早点吐司。
猜你喜欢
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多