问题标签 [stdio]
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.
c++ - VC++ 2008 Express 上的编译器问题,看似正确的代码会引发错误
我一直在尝试重新编码,所以我想我会从一些简单的 SDL 开始,现在,没有文件 i/o,这编译得很好,但是当我输入 stdio 代码时,它开始了抛出错误。这个我不确定,我看不出代码本身有什么问题,但是,就像我说的,我还不如成为一个新手,我想我会来这里找一个有更多经验的人这种东西就看吧。
我想我的问题可以归结为:“为什么不能在 Microsoft 的 Visual C++ 2008 Express 下编译?”
我在代码片段的底部附上了错误日志。提前感谢您的帮助。
报告的实际错误:
c - 谁释放了 setvbuf 缓冲区?
所以我一直在研究 libc 的 stdio 部分是如何实现的,我遇到了另一个问题。看着man setvbuf
我看到以下内容:
当文件上发生第一次 I/O 操作时,会调用 malloc(3),并获得一个缓冲区。
malloc
这是有道理的,除非您实际使用它,否则您的程序不应包含I/O。我对此的直觉反应是 libc 将在这里清理自己的烂摊子。我只能假设它确实如此,因为 valgrind 报告没有内存泄漏(他们当然可以做一些肮脏的事情而不是malloc
直接分配它......但我们假设它现在确实使用malloc
)。
但是,您也可以指定自己的缓冲区...
哦不,内存泄漏!valgrind 证实了这一点。所以似乎每当 stdio 自己分配一个缓冲区时,它都会被自动删除(最迟在程序退出时,但可能在流关闭时)。但是,如果您明确指定缓冲区,那么您必须自己清理它。
不过有一个问题。手册页还说:
您必须确保关闭时间流时 buf 指向的空间仍然存在,这也发生在程序终止时。例如,以下内容无效:
现在这对标准流变得有趣了。由于它们在程序终止时关闭,如何正确清理为它们手动分配的缓冲区?我可以想象文件结构中的“当我关闭标志时清理它”,但它会变得毛茸茸,因为如果我读到这个权利做这样的事情:
由于这句话,将导致标准库进行 2 次分配:
如果参数 buf 为 NULL,则仅影响模式;将在下一次读取或写入操作时分配一个新缓冲区。
编辑:我的问题的附录。由于很明显我必须free
传递任何缓冲区setvbuf
,如果我确实使用它,stdout
有什么实用的方法free
吗?它必须活到程序结束。我能想到的最好的办法是fclose(stdout)
释放它或使用一些人提到的静态缓冲区。我问是因为这看起来确实是一个尴尬的设计决定。
c - C文件读取留下垃圾字符
我正在尝试将文件的内容读入我的程序,但我偶尔会在缓冲区末尾收到垃圾字符。我没有经常使用 C(我一直在使用 C++),但我认为它与流有关。我真的不知道该怎么做。我正在使用 MinGW。
这是代码(这在第二次阅读结束时给了我垃圾):
filetobuf 函数来自此示例http://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_%28C_/_SDL%29。不过对我来说似乎是对的。
所以不管怎样,这是怎么回事?
c - 如何从 \n 分隔文件中读取字符串
我正在尝试读取返回分隔文件。充满了短语。
我正在尝试将每个短语放入一个字符串中。
问题是当我尝试读取文件时
该字符串仅包含一个单词。当它碰到一个空格时,它会停止读取字符串
c++ - 可以用 Boost 的格式库代替 iostream 吗?
我不喜欢<iostream>
在 C++ 库中使用。我更喜欢在<stdio.h>
.
我可以使用 Boost 的格式库来替换<iostream>
我所有的 C++ 程序吗?
c - 使用 isdigit() 和 isalpha() 命令的最简单方法是什么?
我需要简要解释这两个命令的isdigit()
工作isalpha()
原理。当然,我在提出问题之前阅读了在线资源,但我尝试了它们并且无法让它们工作。使用它们的最简单方法是什么?
我知道它会返回一个值,所以我假设我可以像这样使用它:
那是对的吗?我可以将它用于任何类型的角色吗?我可以将它与浮点数或数组进行比较吗?
假设,我想扫描一个包含数字和字母的文本文件,并确定我正在扫描什么。这两个命令可以在这种情况下使用吗?
java - 是否有类似于的 java 库/包?
我已经断断续续地使用 Java 大约 14 年了,在过去 6 年左右的时间里几乎没有其他任何事情。
我真的很讨厌 java.io 包——它的大量子类和适配器。我确实喜欢异常,而不必总是轮询“errno”之类的东西,但我肯定可以在没有声明的异常的情况下生活。
有什么功能类似于 C 中的 Unix/ANSI stdio.h 例程吗?
我知道在 java 本身退役之前,我们永远不会摆脱 java.io 和它的约定,因为它们已经转移到已经融入 java 的许多框架中。也就是说,我想要一些类似这样的东西(我们称之为包 javax.stdio):
有一个主要的实用程序类,可能是 FileStar,它可以读取和写入文件(或管道),无论是文本还是二进制,顺序或随机访问,其构造函数模仿 fopen() 和 popen()。
这个类应该有很多有用的方法来执行诸如 fread()、fwrite()、fgets()、fputs()、fseek() 和其他任何事情(fprintf()?)之类的事情。与 open/construct 模式不兼容的方法会简单地抛出(就像某些集合类/方法在受限时所做的那样)。
然后,有一堆接口建议您在创建流后打算如何使用它:Sequential、RandomAccess、ReadOnly、WriteOnly、Text、Binary,以及这些有意义的组合。甚至可能有方法来返回适当的类型转换(接口),如果您要求一些不兼容的东西,就会抛出。
为了更有趣,跳过声明的异常——例如——javax.stdio.IOException extends RuntimeException。
有这样的开源项目吗?
iphone - 如何在 iPhone 上捕获标准输出?(用于开发目的)
如何捕获 iPhone 的标准 I/O?
用于私人开发目的,不用于公开发布。我正在尝试一些不规则的东西。
前任)
- 将网络流输入打印到 iPhone 控制台和屏幕。
- 将控制台输出重定向到网络流。
- 将 NSLog 输出重定向到我自己的程序。
- ... (和更多)
c - 每个 POSIX 线程的不同标准流
是否有可能为不同的 POSIX 线程实现不同的标准输出重定向,如 printf(3)?标准输入呢?
我有很多基于标准输入/输出的代码,我只能将这些代码分成不同的 POSIX 线程,而不是进程。Linux操作系统,C标准库。我知道我可以重构代码以将 printf() 替换为 fprintf() 并进一步采用这种风格。但在这种情况下,我需要提供某种旧代码所没有的上下文。
那么没有人有更好的主意(查看下面的代码)吗?