【发布时间】:2019-03-19 00:35:22
【问题描述】:
在 Debian 9 上,使用 GCC 8.2,libc6-dev:amd64 2.27:
strchr(和许多其他<string.h> 函数)的手册页有这个原型:
char *strchr(const char *s, int c);
当它的来源是const char *时,它如何返回非constchar *?
原型不应该是const char *strchr(const char *str, int c);吗?
【问题讨论】:
-
C++ 与
strchr()存在问题正是因为这个原因。它有两种重载,一种用于const char *参数,返回类型为const char *,另一种为char *参数和char *返回类型。这是 C 和 C++ 之间的众多区别之一。 -
不要忘记
strchr()早于标准 C。它不会修改其输入字符串,因此const char *适合该参数。但是标准之前没有const,所以char *是原始的返回类型。使用标准 C,这会变得有点不舒服。
标签: c pointers constants glibc