Tag: std

警告:fopen()调用

嗨,我正在用linux下的stdlib编程。 gcc针对以下代码行发出以下警告,任何想法为什么会这样? FILE *fd; if ( fd = fopen( filename, “rw” )== NULL ) { 并且警告是: warning: assignment makes pointer from integer without a cast. 如何实现这一点,根据stdlib文档,fopen的返回类型是FILE *。 那么为什么还有警告呢?有什么想法吗? – 提前致谢 –

裸机环境下的stdlib式库? (内存管理和希望pthread支持)

是否存在用于裸机编程的类似stdlib的库? 我正在尝试为裸机环境构建一个程序(应该是在linux上构建)。 该程序依赖于stdlib和posix lib(malloc,calloc,realloc,free和pthread用法)。 无论如何我会修改单线程。 我正在阅读https://www.ibm.com/developerworks/aix/tutorials/au-memorymanager/ ,也许我将实现自己的内存管理。 但在我的情况下,该程序具有各种大小的malloc / realloc / free。 如果有任何程序(开源)支持内存管理(并希望也是pthread)。请给我一个建议。 语言是C.

C中的fgets()函数

我知道每个人都告诉我使用fgets而不是因为缓冲区溢出而得到的。 但是,我对fgets()的第三个参数感到有点困惑。 据我了解,fgets依赖于: char * fgets ( char * str, int num, FILE * stream ); char* str是我的输入存储位置的ptr。 num是要读取的最大字符数。 但什么是FILE *stream ? 如果我只是提示用户输入字符串(如句子),我应该输入“ stdin ”吗? 我应该在main()附近的顶部键入FILE *stdin吗?

我应该释放/删除getenv()返回的char *吗?

char * val; val = getenv(“ENV_VAR_NAME”); 上面是一个获取环境变量的代码,如果我不释放getenv(char *)返回的内存,它会导致内存泄漏吗? 如果没有那么请回答为什么?

为什么stdlib.h的abs()系列函数返回有符号值?

手册中注明了这种负面含义: 注意未定义尝试取最负整数的绝对值。 这背后的原因是什么?对于想要避免未定义行为的人来说,最好的办法是什么? 我是否必须采取以下措施: unsigned uabs(signed val) { return val > 0 ? val : (val == 1U << ((sizeof(val) * 8) – 1)) ? -1U : -val; } (故意hacky强调对stdlib的不满;-) 例 假设您有一个4位有符号值(为了便于理解)。 unsigned max是15,signed(正)max是7,signed(负)min是-8,所以abs(-8)不适合有符号值。 当然,您可以将其表示为-8,但随后对结果进行除法和乘法不会按预期工作。

是否在stdlib.h中定义了max(a,b)?

我正在使用两台计算机,每台计算机都有不同版本的visual studio。 在visual studio 2008计算机上,我的代码编译。 在visual 2010计算机上,我的代码无法编译,因为我使用的是宏max(a,b) ,据我所知,它是在stdlib.h中定义的。 我不能只定义max(a,b)因为它将是visual 2008计算机上的重新定义。 但如果我没有定义max(a,b)我的代码就无法在visual 2010计算机上编译。 有解决方案吗

为什么C ++ stdlib rand()函数为跨平台的相同种子提供不同的值?

我知道rand()函数根据它给出的种子生成伪随机数,并且在给定的平台上它总是从同一个种子生成相同的数字序列,我想知道它为什么给出跨平台使用相同库的不同序列? 即如何实现rand() ?

malloc和calloc是如何以不同的签名结束的?

可能重复: 为什么calloc接受两个参数而malloc只有一个? 有很多资源描述了malloc和calloc之间的function差异,但是我不能轻易找到描述不同function签名背后的历史的资源: void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); 当然,前者的大小是每个成员的大小。 也许这个想法是可以通过操作系统懒惰地完成多页面大小的成员大小的calloc? (我可以弥补原因以及下一个人 – 没有引用来源没有接受的答案。:-)

为什么endptr参数是strtof和strtod一个指向非const char指针的指针?

标准C库函数strtof和strtod具有以下签名: float strtof(const char *str, char **endptr); double strtod(const char *str, char **endptr); 它们将输入字符串str分解为三个部分: 空白的初始,可能是空的序列 表示浮点值的字符的“主题序列” 无法识别(并且不影响转换)的字符的“尾随序列”。 如果endptr不是NULL ,则*endptr被设置为指向紧跟在转换的一部分的最后一个字符之后的字符的指针(换句话说,尾随序列的开始)。 我想知道:为什么endptr ,然后,指向非const char指针? 是不是*endptr指向一个const char字符串(输入字符串str )?

stdlib的qsort是递归的吗?

我已经读过qsort只是一种通用的类型,没有关于实现的承诺。 我不知道库在不同平台之间的差异,但假设Mac OS X和Linux实现大致相似, 那么qsort实现是递归的还是需要大量的堆栈 ? 我有一个大型数组(数十万个元素),我想要排序它而不会让我的堆栈被遗忘。 或者,对于大型数组的等价物的任何建议?