问题标签 [c-standard-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
290 浏览

c - popen 是标准的 C 函数吗?

阅读有关函数popen的信息。

它在标头stdio.h(标准标头)中,它返回FILE*(标准 IO 结构,与 Unix 函数不同unistd.h),但我在任何 C 标准参考网站上都找不到它。

那么它是标准的,还是某种 GCC 扩展?它是什么?

0 投票
0 回答
218 浏览

c - 我们如何将像 Newlib 这样的 C 库与自定义链接器脚本链接起来?

我正在为我们研究组正在开发的多核架构移植 newlib。到目前为止,我们使用最小的 crt.S 和链接器脚本编写裸机代码。可以使用单程序多数据 (SPMD) 编程模型对众核处理器进行编程。它需要将特定于线程的部分放置到区域0x1000-0x2000中。而程序的其余部分应放在0x80000000. 如何使用我们的自定义链接脚本处理在默认链接脚本中找到的无数输入部分?

或者,有没有办法将 newlib 的默认链接器脚本与我们的自定义脚本一起使用?这样,来自的所有内容lib*.a都将与 newlib 的链接脚本链接,并且链接的内容可以放在0x80000000自定义脚本之后。

0 投票
4 回答
791 浏览

c - 计算文件长度时是否应该检查 fseek() 的返回值?

我有这个惯用的片段来获取二进制文件的长度:

…我知道,对于二进制流[ 1 ],迂腐fseek(file, 0, SEEK_END)的行为是未定义的——但坦率地说,在我也没有这个问题的平台上,无论如何这是另一个问题的主题…</p> fstat()

我的问题是:fseek()在这种情况下我应该检查返回值吗?

我从来没有见过fseek()在这样的情况下被检查过,我也想知道fseek()这里可能会返回什么样的错误。

编辑:

在阅读了Clifford 的回答后,我也认为在计算文件大小时处理fseek()和返回值的最佳方法是编写一个专用函数。ftell()但是 Clifford 的好建议不能处理size_t数据类型(毕竟我们需要一个大小!),所以我想最后最实用的方法是使用指针来存储文件的大小,并保留返回我们的专用功能的价值仅适用于失败。这是我对 Clifford 安全尺寸计算器解决方案的贡献:

因此,当我们需要知道文件的长度时,我们可以简单地执行以下操作:

0 投票
0 回答
226 浏览

c - C standard library HTTP 301 Redirect using sockets on Objective-C

I'm a very beginner on using sockets with C standard library in Objective-C. I'm trying to make HTTP requests to fetch pages on a self-developed browser, to this we're using a query request such as follows:

Where page is the path (if exists), hostname is the URL, and user agent is some device information such as iOS version, device name and so on. The socket has been created with the following protocols and types:

The problem is that no matter what kind of URL we sent (with http or https scheme) if the page does not support HTTP/1.1 the response status is always HTTP/1.1 301 Moved Permanently. Our solution shows the response body (using stackoverflow's url as example: stackoverflow.com):

When we click on the link and send the new URL with HTTPS scheme, the response with status 301 still happens. We already tried to change our query to HTTP/2 but the same response (with HTTP/1.1) is still received. I think that can be a problem with my sockets configuration, but here enters the part that I'm not familiar with, so I don't know what to do.

0 投票
3 回答
65 浏览

c - 使用带有联合的类型双关语的问题

我想了解更多关于类型双关和别名的信息。因此,我在选项中使用GCC 文档-fstric-aliasing提供的代码,如下所示:

我期望没有什么特别的,但我只得到 0。所以我用不同的值进行测试,t.d但没有变化。我在 Debian 9 上使用 gcc 6.3 测试此代码,没有选项。我也尝试使用-fno-strict-aliasing相同的选项

如果有人可以解释,为什么我只得到 0 那就太好了

0 投票
4 回答
7956 浏览

printf - Clang 使用什么标准 C 库?glibc,它自己的,还是其他的?

我很确定 glibc 是 gcc 的标准 C 库实现的名称。

但对于 LLVM/Clang 我不确定。我已经用谷歌搜索了它是否带有自己的整个标准 C 库的实现,或者他们是否也使用 glibc。令人惊讶的是,我能找到的只是最近一篇讨论Google 正在考虑为 LLVM 编写新的 libc 的文章。但不是那会取代什么。

即使在 LLVM/Clang 源代码库中,我也很有可能只是盲目或愚蠢,但我似乎找不到它。

为了清楚起见,我只对 C 标准库感兴趣,而不是 C++ 标准库。我对研究他们printf对函数系列的实现特别感兴趣。

有人可以告诉我在哪里可以找到 Clang 的 libc/标准 C 库实现或其源代码库吗?

0 投票
1 回答
231 浏览

c - freopen() 关于缓冲 (setvbuf()) 的预期行为?

为了实现 freopen(),我在标准中提出了一条规范,据我所知,该规范实际上并没有指定任何内容。

所以...freopen()将关闭流(忽略错误),清除其错误和 EOF 标志,重置宽方向,然后以给定模式重新打开流。这很清楚;这基本上是一个 fclose() / fopen()。即使没有这样定义,很明显这就是预期的。

setvbuf()但是,关于可能对流所做的事情,我有两个问题- 设置用户分配的缓冲区和/或更改缓冲区策略。


问题 1。

1)freopen()预计将事物恢复到默认状态,就好像它实际调用过一样fopen()?或者,无论用户在旧流上设置了什么,它是否有望延续到新流setvbuf()?这指的是缓冲存储器和缓冲策略,但这里的主要问题是缓冲存储器。

的规范fclose()指定用户与流相关联的任何缓冲区setvbuf()都是解除关联的,即现在​​可以free()由用户'd'。

freopen()只指定它关闭与流关​​联的文件,而不是fclose()它。

那么,在 之后freopen(),用户关联的缓冲内存是否仍然与流关联?


问题2。

freopen()可以想象,可以FILE在调用时实际上与打开文件无关的结构上使用(因为尝试关闭文件的错误将被忽略)。

该文件结构可能是以前打开的流,具有用户分配的缓冲区内存和缓冲区策略。是freopen()遵守这些设置,即将缓冲存储器/策略与“重新”打开的文件重新关联,还是将结构重新初始化为默认值,假设用户在之前 ing 文件free()后使用缓冲存储器?fclose()


我的看法。

看看 Q2,我看不到标准库有一种方法可以可靠地确定FILE具有用户分配的缓冲内存的当前未打开的结构是否仍然“拥有”该缓冲内存,或者用户是否已经回收了该内存。(可以想象,该内存可能是本地的,即不是由malloc()/处理的内存列表的一部分,free()即使我愿意去那里——这将是标准库函数所期望的非常反常的工作。)

缓冲政策的类似考虑。

因此,据我所知,唯一可靠freopen()的处理方式是将“与指定流关联的任何文件”的关闭处理为“真实” fclose(),并将缓冲内存/策略重新设置为默认值。

我的理解是否正确,还是 Q1 / Q2 有其他答案?

0 投票
3 回答
336 浏览

c - 将未知长度的字符串与已知长度的字符串进行比较

我想比较一个未知长度的以空字符结尾的字符串 ( s1) 和一个已知长度的未终止字符串 ( s2)。

!strncmp(s1, s2, s2_len)s2接近正确,但如果是 的前缀,也变为真s1

strlen(s1) == s2_len && !strcmp(s1, s2)是正确的,但扫描s1两次。

显然,手动比较字符串也可以,但让我失去了 C 库在过去四十年中获得的所有闪亮优化。

有没有用 C 库函数实现这一点的好方法?

0 投票
4 回答
56 浏览

c - C 随机整数生成器问题(A book on C 4th Edition)

这是教科书“A book on C”中的代码。

当您在提示时键入 23 时,它应该在 3 行 8 列 (3*8-1) 中生成 23 个随机数。

我了解到printf("%7d", rand())应该返回一个以十进制整数格式打印的值,并且打印整数的字段的宽度是 7。

但是,我得到了宽度超过 7 的随机数,而且它看起来一点也不整洁。(没有列也没有行,只有一大块连续的数字,比如 1235289043528935294835698246182965982)

我认为它与表达式printf("%7d", rand())函数以及它应该如何返回值的方式有关。

我开始认为教科书是错误的。

0 投票
2 回答
165 浏览

qt - 使用 Qt 标准库函数包装器的原因

是否有任何理由使用 Qt 标准函数包装器,如 qstrncpy 而不是 strncpy?

我在文档中找不到任何提示。我很好奇是否有任何功能差异。看起来像是让代码依赖于 Qt,即使在非强制性的地方也是如此。

我发现了这个:C library 的 Qt wrapper 但它没有回答我的问题。