23得票4回答
Clang使用哪个标准C库?是glibc、自己的还是其他的?

我相信glibc是gcc标准C库实现的名称。 但对于LLVM / Clang,我不确定。 我尝试使用Google搜索来查找它是否带有自己的整个标准C库的实现,或者它们是否也使用glibc。 令人惊讶的是,我能找到的只有一篇最近的文章,讨论了Google正在考虑为LLVM编写新的libc,但没有...

19得票9回答
为什么fopen函数的第二个参数要传入一个字符串?

我一直觉得 C 函数 fopen() 接受一个 const char * 作为第二个参数是很奇怪的。我认为,如果在 stdio.h 中定义了位掩码,例如 IO_READ 等,那么阅读代码和实现库都会更容易,这样你就可以执行以下操作: FILE *myFile = fopen("file.tx...

18得票8回答
strncmp相比strcmp的优势是什么?

似乎通常推荐使用 strncmp 而不是 strcmp,这有什么优点?我认为这可能与安全有关。如果是这种情况,那么如果其中一个输入字符串已知为文字常量,例如 "LiteralString",它是否仍然适用? 更新: 我的意思是在需要比较整个字符串的相同用户场景下,可以使用如下的 strncm...

16得票2回答
为什么在C语言中abs()和fabs()被定义在两个不同的头文件中?

标准库函数abs()声明在stdlib.h中,而fabs()在math.h中。 为什么它们存在不同的头文件中?

13得票2回答
“getenv...函数...可能不安全”- 真的吗?

我正在使用MSVC编译一些使用标准库函数(如getenv(),sprintf等)的C代码,并将/W3设置为警告。 MSVC告诉我:   'getenv':此函数或变量可能不安全。请考虑改用_dupenv_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。 问题: ...

11得票4回答
有没有类似于strtol的函数,它不需要以空字符结尾的字符串作为参数?

是否有类似于strtol的标准C函数,可以接受一个非空结束字符串的char*和长度作为参数? 我知道我可以将字符串复制到一个null-terminated区域,但出于效率考虑,这是不可取的。

10得票2回答
为什么stdlib.h的abs()函数家族返回有符号值?

man页中指出了这种情况的负面影响: 注意事项 尝试获取最小负整数的绝对值是未定义的。 为什么会这样?有何最佳解决方案可以避免未定义行为?我是否必须采取以下措施:unsigned uabs(signed val) { return val > 0 ...

8得票4回答
什么时候printf()和scanf()函数被静态或动态链接到应用程序中?

当一个C程序被编译时,它会按照预处理器、编译器、汇编器和链接器的顺序进行处理。链接器的主要任务之一是使库函数的代码可用于您的程序。链接器可以以静态或动态的方式链接它们。 stdio.h只包含声明,没有定义。我们只在程序中包含stdio.h来告诉编译器函数的返回类型和名称,例如printf()...

7得票1回答
为什么没有“unsigned wchar_t”和“signed wchar_t”类型?

char的符号未被标准化。因此有signed char和unsigned char类型。因此,处理单个字符的函数必须使用可以容纳signed char和unsigned char两种类型的参数类型(选定了int作为该类型),因为如果参数类型是char,则在以下代码中编译器将产生类型转换警告(如...

7得票3回答
strtol和strtoul有什么区别?

我在使用C语言的 strtol 函数时遇到了一些意外的结果。 下面是示例程序: #include <string.h> #include <stdio.h> #include <stdlib.h> int main() { printf...