c - 是否有可能找出 strcpy 的当前语法何时添加到 C 标准中?

标签 c history

最古老的公开C标准似乎是 ISO/IEC 9899:1999,于 1999 年发布。 有 strcpy函数已有其当前语法。

我问这个问题的原因是我发现了一个非常非常旧的系统(令我震惊的是)strcpy似乎与 memcpy 具有几乎相同的语法.

在该实现中,strcpy 的行为如下:

  • strcpy(char *destination, char *source, int length)就像现代的一样工作memcpy
  • strcpy(char *destination, char *source)编译,但它没有任何明显的副作用,就好像它是用 length = 0 调用的一样.
  • strncpystrcpy 完全一样,它甚至可以仅使用 2 个参数进行编译。

因此,对于对 C 语言考古学感兴趣(并且可以访问非常古老的标准)的人来说,是否存在一个 C 标准,其中 strcpy没有定义?哪个是第一个定义它的标准?我正在处理一个不符合标准的编译器(一个甚至不符合最古老的 C 标准的编译器)吗?

我找不到任何迹象表明真正应该实现哪个版本的 C,唯一的提示是它是在 1997 年之前为富士通处理器编写的(因为我发现文本“Copyright 1997”)。

编辑如果this source值得信赖,strcpy已经在 1989 年以其当前形式定义。所以我必须处理比我最初怀疑的更古老的东西!

最佳答案

第一个发布的 C 语言标准是 C89 (ANSI X3.159-1989)。它定义 strcpy 如下:

char *strcpy(char *s1, const char *s2);

在那之前,尝试寻找 Kernighan 和 Ritchie 编写的“The C Programming Language”的第一个版本,这是从 1978 年到 1989 年出版的事实标准。如果 strcpy 早于此。

根据 http://cm.bell-labs.com/7thEdMan/ , 1979 年发布的 Version 7 UNIX 将 strcpy 定义为

char *strcpy(s1, s2)
char *s1, *s2;

我无法在 1975 年发布的第 6 版 UNIX 的文档中找到 strcpy,但它的“C 手册”由 Dennis Ritchie 编写,包含一个示例函数

copy(s1, s2)
char *s1, *s2
{
    while(*s2++ = *s1++);
}

它的“C 教程”,由 Brian Kernighan 编写,而是包含这个版本:

strcopy(s1, s2)
char s1[ ], s2[ ]; {
    int i;
    for( i = 0; (s2[i] = s1[i]) != '\0'; i++ );
}

这表明 strcpy 的现代版本起源于 1975 年 V6 UNIX 发布和 1978 年 K&R C 发布之间的某个时间。

请注意,即使在这么早的时候,我们就已经看到了 C 的两位主要作者之间的风格差异:Kernighan 将函数的左括号与参数声明放在同一行,而 Ritchie 更喜欢将其放在新的一行自己。

关于c - 是否有可能找出 strcpy 的当前语法何时添加到 C 标准中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300040/

相关文章:

javascript - 带有 iFrame 的后退按钮

reactjs - 自定义历史记录不起作用的 react 路由器

bash - 将历史文件中的哈希标记时间戳转换为所需的字符串

c - 使用链接列表将文件中的单词读取到动态字符中

c++ - libevent bufferevent 套接字刷新

c - 如何读取或写入交错数组?

c - 打印棋盘

android - 如何在 Android 应用程序中保存历史记录?

sql - 为什么SQL的语法是由内而外的?

c++ - 如何从 GetLastError() 返回的错误码中获取错误信息?