我知道你可以用printf()和打印puts().我还可以看到,printf()允许您插入变量并进行格式化.
是否puts()仅仅是一种原始的版本printf().是否应该在printf()没有字符串插值的情况下使用它?
我写了这个函数来从文件中读取一行:
const char *readLine(FILE *file) {
if (file == NULL) {
printf("Error: file pointer is null.");
exit(1);
}
int maximumLineLength = 128;
char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength);
if (lineBuffer == NULL) {
printf("Error allocating memory for line buffer.");
exit(1);
}
char ch = getc(file);
int count = 0;
while ((ch != '\n') && (ch != EOF)) {
if (count == maximumLineLength) {
maximumLineLength += 128;
lineBuffer = realloc(lineBuffer, maximumLineLength);
if (lineBuffer == NULL) {
printf("Error reallocating space for …Run Code Online (Sandbox Code Playgroud) 这是一个奇怪的查询而不是一个重要的问题,但为什么当将十六进制打印为带有前导零的8位数字时,为什么这%#08X不显示相同的结果0x%08X?
当我尝试使用前者时,08格式化标志被删除,并且它不能正常使用8.
我只是好奇.
我有一个FILE *,通过电话回来fopen().我需要从中获取文件描述符,以便进行调用fsync(fd).从文件指针获取文件描述符的功能是什么?
任何人都可以通过一个简单的例子从头到尾解释如何在C中创建头文件.
我正在研究一个旧的代码库,几乎每次调用free()都会在其参数上使用强制转换.例如,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
Run Code Online (Sandbox Code Playgroud)
其中每个指针都是相应的(和匹配的)类型.我完全没有理由这样做.这是非常古老的代码,所以我想知道它是否是K&R的东西.如果是这样,我实际上希望支持可能需要这个的旧编译器,所以我不想删除它们.
使用这些演员阵容有技术原因吗?我甚至没有看到使用它们的实用理由.在释放数据类型之前提醒自己有什么意义?
编辑:这个问题不是另一个问题的重复.另一个问题是这个问题的一个特例,如果亲密的选民能够阅读所有的答案,我认为这是显而易见的.
Colophon:我给出了"常量答案"的核对标记,因为这可能是为什么需要这样做的真正原因; 然而,关于它是一个ANSI C之前的习惯(至少在一些程序员中)的答案似乎是它在我的情况下使用的原因.很多人在这里有很多好处.感谢您的贡献.
我正在经历一些简单的例子和如何在ANSI C man regex.h中使用正则表达式的最佳实践并没有提供那么多的帮助.
在errno.h,这个变量被声明为extern int errno;我的问题是,errno在一些调用之后检查值是否安全或在多线程代码中使用perror()是否安全.这是一个线程安全变量吗?如果没有,那么替代方案是什么?
我在x86架构上使用linux和gcc.
对于学校项目,我要编写C函数printf.事情进展顺利,但有一个问题我找不到合适的答案,所以我在这里.
printf("PRINTF(d) \t: %d\n", -2147483648);
Run Code Online (Sandbox Code Playgroud)
告诉我(gcc -Werror -Wextra -Wall):
error: format specifies type 'int' but the argument has type 'long'
[-Werror,-Wformat]
printf("PRINTF(d) \t: %d\n", -2147483648);
~~ ^~~~~~~~~~~
%ld
Run Code Online (Sandbox Code Playgroud)
但是如果我使用int变量,一切都很顺利:
int i;
i = -2147483648;
printf("%d", i);
Run Code Online (Sandbox Code Playgroud)
为什么?
我理解了许多观点,他们非常有趣.无论如何,我猜printf是使用<stdarg.h>librairy,所以,va_arg(va_list ap, type)也应该返回正确的类型.对于%d和%i,显然返回的类型是int.它有什么改变吗?