Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的系统。但是,我有\u POSIX2\u LINE\u MAX(来自)。它是从#定义d到2048。因为这个标准只说明这是一个下界,这也许不太有帮助,但是C和C++是不同的语言!奥拉夫,虽然我通常感谢你们在区分这个区别方面所做的努力,但我相信,在这种情况下_C++_C - Fatal编程技术网

我的系统。但是,我有\u POSIX2\u LINE\u MAX(来自)。它是从#定义d到2048。因为这个标准只说明这是一个下界,这也许不太有帮助,但是C和C++是不同的语言!奥拉夫,虽然我通常感谢你们在区分这个区别方面所做的努力,但我相信,在这种情况下

我的系统。但是,我有\u POSIX2\u LINE\u MAX(来自)。它是从#定义d到2048。因为这个标准只说明这是一个下界,这也许不太有帮助,但是C和C++是不同的语言!奥拉夫,虽然我通常感谢你们在区分这个区别方面所做的努力,但我相信,在这种情况下,c++,c,C++,C,我的系统。但是,我有\u POSIX2\u LINE\u MAX(来自)。它是从#定义d到2048。因为这个标准只说明这是一个下界,这也许不太有帮助,但是C和C++是不同的语言!奥拉夫,虽然我通常感谢你们在区分这个区别方面所做的努力,但我相信,在这种情况下,把C和C++结合在一起是合法的,因为 ErnOn/Cord>概念被他们都使用。选择任意一个标记而不是另一个标记都是任意的。您可以选择自己的最大值,并在运行时剪裁错误消息吗?我可能遗漏了一些东西,但是在任何ssize______________


我的系统。但是,我有
\u POSIX2\u LINE\u MAX
(来自
)。它是从#定义d到2048。因为这个标准只说明这是一个下界,这也许不太有帮助,但是

C和C++是不同的语言!奥拉夫,虽然我通常感谢你们在区分这个区别方面所做的努力,但我相信,在这种情况下,把C和C++结合在一起是合法的,因为 ErnOn/Cord>概念被他们都使用。选择任意一个标记而不是另一个标记都是任意的。您可以选择自己的最大值,并在运行时剪裁错误消息吗?我可能遗漏了一些东西,但是在任何ssize________________________________________标准对
SSIZE\u MAX
没有帮助,因为它没有定义
SSIZE\u MAX
。如果
SSIZE_MAX
对您的代码很重要,建议标记定义它的感兴趣的环境。我倾向于同意该标准在这方面没有保证,但我不认为cppreference.com是这方面的权威参考。详细信息:“这是因为可用的系统内存(可由您的C程序直接使用)不能大于SIZE_MAX”-->不同意,
SIZE_MAX
是单个数组的数组索引的最大值,而不是最大内存量。关于
SSIZE\u MAX
:这在C中没有定义,因此最好引用您的参考。
SIZE\u MAX
也是C2011
结构部分的最大大小,直到但不包括最后一个成员,因为它是标准
offsetof()
宏的结果类型。@chux:standard C有一个平面(von Neumann)内存模型,所有这些内存都可以被视为单个数组(
((char*)0)[x]
)。哈佛C编译器(如大多数AVR和8051 MCU),分段(如80286),或其他系统通常使用非标准语言扩展来实现对不同内存区域的访问,或对语言功能引入限制以避免某些内存模型问题。答案不一致,但对这些模仿的编写将受到严重限制。支持这一点的Post C stand引用。据我在那里的阅读e无,因此不同意不受支持的“标准C有一个平面(冯·诺依曼)内存模型,所有这些内存都可以被视为单个数组(((char*)0)[x])”而且只有这个模型。+1,不过请注意,对于选择传递给
strerror\r
的缓冲区的大小来说,有一个上限也是很好的,这样可以减少对运行时逻辑的需要。此外,我已经考虑并意识到,在您的程序情况下,最大值可能会发生变化,但我希望有一些标准限制我们至少可以在一些系统上检查特定于平台的宏,这可能会使至少一些系统不会出现这种问题,因此这是一个问题。特别值得注意的是,POSIX(根据您的链接)如果提供给
strerror\u r
的缓冲区不够大,则允许
strerror\u r
使用
ERANGE失败:我的读数表明,一个先检查长度,然后在不写任何内容的情况下出错的实现符合标准。我想相信没有任何实现会这样做,或者我是在误读,但如果是这样的话,那么它似乎是符合标准的s在不知道上限的情况下,我们似乎必须要么在适度宽松的缓冲区一侧出错以保存它,要么在返回成功之前重新分配一个循环?不能保证
strerrorbuf
是通过调用
strerror\u r
修改的,该调用返回
ERANGE
。因此,您必须准备好处理var标准规范性文本中规定的各种回报组合。经过几天的思考,我(暂时)接受了这个答案,因为它是1)一般性的,2)提供了关于为什么这些信息不能(或者不应该)的最彻底的解释可以在编译时用于许多实现。我能够通过定义
\u GNU\u SOURCE
来获得
NL\u TEXTMAX
。因此,我怀疑为
\u POSIX\u C\u SOURCE
定义的足够“高”的值会将其包括在内。无论如何,该值为
0x7fffffff
,或2147483647。虽然
SSIZE_MAX
的宽度是原来的两倍(后面还有8位
f
数字)。为了记录在案,我也加上了这一点,我非常感谢提供的关于我的特定用例的信息。尽管我目前接受了另一个答案,但我认为这是下一个最好的答案,因为它涵盖了主要答案中没有给出的信息,并且确实表明(尽管不是决定性的)一些实现,或者建立在语言规范之上的其他标准,实际上可能定义了某种上限。