gpt4 book ai didi

c - 为什么 iconv 函数需要一个非常量输入缓冲区?

转载 作者:IT王子 更新时间:2023-10-29 01:20:48 26 4
gpt4 key购买 nike

document of iconv ,函数概要是这样的:

#include <iconv.h>

size_t iconv (iconv_t cd, const char* * inbuf,
size_t * inbytesleft,
char* * outbuf,
size_t * outbytesleft);

但是,当我检查系统中的iconv.h 时,函数概要是这样的:

extern size_t iconv (iconv_t __cd, char **__restirct __inbuf,
size_t *__restrict __inbytesleft,
char **__restirct __outbuf,
size_t *__restrict __outbytesleft);

这两个函数简介中,一个是const char **,而另一个只是char **。

为什么文档里的功能介绍和我系统里的不一​​样?为什么 iconv 函数需要一个非常量输入缓冲区?

我的g++版本是6.3.0。

最佳答案

iconv() 的问题在于它不是 C 标准的一部分,而是在两个不同的标准中指定的。其中之一是 POSIX-1.2008 :

#include <iconv.h>

size_t iconv(iconv_t cd, char **restrict inbuf,
size_t *restrict inbytesleft, char **restrict outbuf,
size_t *restrict outbytesleft);

另一个是SUSv2 :

#include <iconv.h>

size_t iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
char **outbuf, size_t *outbytesleft);

它们在 **inbufconstness 上有所不同, 所以如果你想在两个标准之间保持可移植性,你必须通过一个非const **inbuf,不幸的是。

编辑: 由于这是双指针,问题更严重,see my answer here .简而言之,这些规范在任何一个方向上都不兼容......


您链接为“iconv 的文档”的是 GNU libiconv 的文档,它旨在用于 native 不提供 iconv() 的平台-- 这显然遵循 SUSv2 规范。

您在系统上找到的头文件属于您平台的 C 库 glibc 实现遵循 POSIX-1.2008 规范.

关于c - 为什么 iconv 函数需要一个非常量输入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45938990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com