c++ - 从 char 指针中减去 char 数组产生一个 int?

标签 c++ c arrays pointers strchr

strchr 引用中 http://www.cplusplus.com/reference/cstring/strchr/ ,提供了这个例子。

/* strchr example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] = "This is a sample string";
  char * pch;
  printf ("Looking for the 's' character in \"%s\"...\n",str);
  pch=strchr(str,'s');
  while (pch!=NULL)
  {
    printf ("found at %d\n",pch-str+1);
    pch=strchr(pch+1,'s');
  }
  return 0;
}

为什么从 char 指针 pch 中减去 char 数组 str 加一得到 诠释? (由 %d 格式类型表示)如果我删除“-str”,程序将不会执行,直到我更改 %d%s

最佳答案

简而言之,这是一个错误:
该表达式可能属于 int 类型,或者您可能在对 printf 的调用中有未定义的行为 .

让我们一步一步来:

  1. 您实际上不是从指针中减去数组,而是从指针中减去指针:
    在几乎所有情况下,array decays to a pointer to its first element .

  2. 两个指针的区别是什么类型(仅当它们指向或直接指向同一数组中的元素时才定义)?

    ptrdiff_t (这就是 typedef 中的 <stddef.h> 的用途。)

  3. ptrdiff_t可能恰好是 int ,但不要依赖它。
    相反,使用正确的格式说明符:%ti .

关于c++ - 从 char 指针中减去 char 数组产生一个 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27756958/

相关文章:

c - 为 Windows 库添加 unicode 支持

c - 如何找出用于构建二进制文件的 *.c 和 *.h 文件?

c - 如何创建一个可以安全并发执行的临时文件名?

python - np.argsort() 排名紧密

iOS 5 以编程方式将数组添加到选择器

c# - .NET DateTime 到 time_t 秒

C++ 通过引用传递的参数也通过引用接收

c# - 如何使用 C# 从 postgresql 数据库中检索双数组?

c++ - 具有模板类型的静态私有(private)函数作为 C++ 中的默认参数

c++ - boost::asio::co_spawn 在 MSVC 中未定义