最古老的公开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
调用的一样. -
strncpy
与strcpy
完全一样,它甚至可以仅使用 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/