91得票3回答
C标准库和C POSIX库之间的区别

我对"C标准库"和"C POSIX库"有点困惑,因为我发现在"C POSIX库"中定义的许多头文件也是"C标准库"的一部分。 所以,我猜想,"C标准库"是由ANSI C组织定义的库,在不同平台(Win32/类Unix)上有不同的实现,而"C POSIX库"只是Unix-like操作系统上"C...

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

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

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

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

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

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

64得票1回答
为什么没有int128_t类型?

有许多编译器提供128位整数类型,但我使用的所有编译器都没有提供int128_t这个typedef。为什么呢? 据我所知,标准: 保留了int128_t作为此目的的保留名称 鼓励实现提供此类类型并提供typedef 强制要求此类实现至少提供一个128位的intmax_t (而且,我不...

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

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

7得票1回答
C标准库中的任何函数是否会隐式地使用 `stderr`?

C语言规范要求所有C程序都有三个可用的流(stream): stdout、stdin和stderr。 用户可以根据自己的需要使用这些流,例如: fprintf(stdout, "lol"); fputs("oops", stderr); fgets(buffer, 20, stdin); ...

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

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

69得票8回答
为什么 `printf` 中没有定义 `float` 的说明符?

看起来可能是可以的,因为在C99中有长度修改器可以应用于int: %hhd, %hd, %ld 和 %lld代表signed char, short, long和long long。甚至有一个适用于double的长度修改器: %Lf代表long double。 问题是为什么他们省略了floa...

43得票7回答
C标准是否保证缓冲区不会超出其空终止符而被访问?

在标准库的许多字符串函数中,如果提供了缓冲区,在各种情况下是否保证缓冲区不会被修改超出空字符终止符?例如:char buffer[17] = "abcdefghijklmnop"; sscanf("123", "%16s", buffer); 现在需要将 buffer 设置为 "123\0ef...