我在哪里可以找到string.cpp的来源

时间:2013-06-20 05:16:15

标签: c++ header-files user-defined-functions

我想访问string.h的源文件。我的意思是该文件具有string.h中可用的所有函数的定义。

例如strcpy()string.h中的函数;我在哪里可以得到它的定义,因为string.h只给出了函数的原型?

5 个答案:

答案 0 :(得分:5)

您没有指定开发人员工具 - 此答案适用于Windows上的Visual Studio 2008。 CRT来源可以在以下网址找到:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\crt\src\

如果它安装在默认位置。对于其他版本的Visual Studio,只需将9.0部分替换为10.0(VS 2010)或11.0(VS 2012)。

你找不到一个string.c文件 - 在他们自己的.c文件中实现了几个函数(其中一些函数在汇编中实现)。

每个工具/操作系统的源位置和可用性会有所不同。

答案 1 :(得分:2)

C标准库的源代码实现取决于您使用的环境和编译器。如果你在Linux上编程,你可能会使用glibc,它是开源的,可以免费下载here

顺便说一句,这是strcpy的实现:

/* Copyright (C) 1991, 1997, 2000, 2003 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#include <stddef.h>
#include <string.h>
#include <memcopy.h>
#include <bp-checks.h>

#undef strcpy

/* Copy SRC to DEST.  */
char *
strcpy (dest, src)
     char *dest;
     const char *src;
{
  char c;
  char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
  const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
  size_t n;

  do
    {
      c = *s++;
      s[off] = c;
    }
  while (c != '\0');

  n = s - src;
  (void) CHECK_BOUNDS_HIGH (src + n);
  (void) CHECK_BOUNDS_HIGH (dest + n);

  return dest;
}
libc_hidden_builtin_def (strcpy)

答案 2 :(得分:2)

为什么不尝试glibc的副本,它包含所有c函数的来源,或者您可以获取 P.J. Plauger's book, "The Standard C Library的副本。

答案 3 :(得分:0)

取决于您的操作系统和编译器。

#include<...> //Will look up default include directory
#include "..." //Will look up specified path in between the "..."

每个操作系统的默认包含目录都不同,

看看这个: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

答案 4 :(得分:0)

找到定义可能会有问题,但看看这个: http://www.cplusplus.com/reference/cstring/?kw=string.h