标签: stdio

应该在C++代码中使用哪个CI/O库?

在新的C++代码中,我倾向于使用C++ iostream库而不是C stdio库.

我注意到一些程序员似乎坚持stdio,坚持认为它更便携.

这是真的吗?有什么好用的?

c++ iostream stdio

33
推荐指数
7
解决办法
1万
查看次数

如果'&'没有放入'scanf'语句会怎么样?

我去了一个采访中,我被问到这个问题:

您对以下内容有何看法?

int i;
scanf ("%d", i);
printf ("i: %d\n", i);
Run Code Online (Sandbox Code Playgroud)

我回答了:

  • 该程序将成功编译.
  • 它将错误地打印数字,但它将一直运行直到结束而不会崩溃

我做出的回应是错误的.我不堪重负.

在那之后他们解雇了我:

在某些情况下,程序会崩溃并导致核心转储.

我不明白为什么程序会崩溃?谁有人解释我的原因?任何帮助赞赏.

c scanf stdio

31
推荐指数
5
解决办法
4243
查看次数

C相当于autoflush(每次写入后刷新stdout)?

在Perl中,我可以键入:

$|++;
Run Code Online (Sandbox Code Playgroud)

打印到STDOUT的任何内容都将自动fflush()编辑.

C中有等价物吗?换句话说,有什么方法可以告诉stdio在每次printf()之后自动刷新stdout,它会自动刷新stderr吗?

c stdio

30
推荐指数
3
解决办法
9232
查看次数

为什么fread会提早到达EOF?

我正在编写一个将文件读入内存的C库.它会跳过文件的前54个字节(标题),然后将余数作为数据读取.我使用fseek来确定文件的长度,然后使用fread来读取文件.

循环运行一次然后结束,因为达到了EOF(没有错误).最后,bytesRead = 10624,ftell(stream)= 28726,缓冲区包含28726个值.我希望fread读取30,000字节,当达到EOF时文件位置为30054.

C不是我的母语所以我怀疑我在某个地方有一个愚蠢的初学者错误.

代码如下:

const size_t headerLen = 54;

FILE * stream;
errno_t ferrno = fopen_s( &stream, filename.c_str(), "r" );
if(ferrno!=0) {
  return -1;
}

fseek( stream, 0L, SEEK_END );
size_t bytesTotal = (size_t)(ftell( stream )) - headerLen; //number of data bytes to read
size_t bytesRead = 0;
BYTE* localBuffer = new BYTE[bytesTotal];
fseek(stream,headerLen,SEEK_SET);
while(!feof(stream) && !ferror(stream)) {
    size_t result = fread(localBuffer+bytesRead,sizeof(BYTE),bytesTotal-bytesRead,stream);
    bytesRead+=result;
}
Run Code Online (Sandbox Code Playgroud)

根据您使用的参考,很明显在模式标志中添加"b"就是答案.寻求骷髅徽章的提名.:-)

该引用在第二段,第二句(虽然不在他们的表中)中讨论它.

MSDN直到页面中间才讨论二进制标志.

OpenGroup提到了"b"标签的存在,但声明它"应该没有效果".

c c++ file-io stdio feof

29
推荐指数
1
解决办法
1万
查看次数

是否有一个Windows等同于HANDLEs的fdopen?

在Unix中,如果您有一个文件描述符(例如来自套接字,管道或从父进程继承),您可以FILE*在其上打开一个缓冲的I/O 流fdopen(3).

Windows上是否有等效的HANDLEs?如果你有HANDLE一个从你的父进程继承(从标准输入,标准输出,或标准错误不同),或从一个管道CreatePipe,是有可能得到一个缓冲FILE*从中流?MSDN确实提供了文档_fdopen,但它适用于返回的整数文件描述符_open,而不是通用HANDLE的.

c winapi stdio

29
推荐指数
1
解决办法
8708
查看次数

C相当于fstream的偷看

我知道在C++中,您可以使用以下方式查看下一个字符:in.peek();.

当我试图"查看"C中文件的下一个字符时,我该怎么做呢?

c stdio filestream peek

27
推荐指数
2
解决办法
2万
查看次数

在C中检测EOF

我使用以下C代码从用户获取输入,直到EOF发生,但问题是此代码不起作用,它在第一次输入后终止.任何人都可以告诉我这个代码有什么问题.提前致谢.

float input;

printf("Input No: ");
scanf("%f", &input);

while(!EOF)
{
    printf("Output: %f", input);
    printf("Input No: ");
    scanf("%f", &input);
}
Run Code Online (Sandbox Code Playgroud)

c stdio

25
推荐指数
2
解决办法
10万
查看次数

如何从C中的stdio获取int?

这有很大的麻烦......

printf("> ");
int x = getchar();

printf("got the number: %d", scanf("%d", &x));
Run Code Online (Sandbox Code Playgroud)

产量

> 1234
got the number: 1
Run Code Online (Sandbox Code Playgroud)

c stdio

25
推荐指数
2
解决办法
13万
查看次数

C中的FILE关键字究竟是什么?

我已经开始学习一些C作为一种爱好并且已经盲目地使用FILE作为文件指针的声明很长一段时间了,我一直在想.这是C的关键字或特殊数据类型来处理文件吗?它是否包含文件内的流和其他数据?为什么它被定义为指针?

一个例子来说明我的意思,使其更清晰:

FILE* fp; //<-- this
fp = fopen("datum.txt", "r");

while(!feof(fp)) {
   // etc.
}
Run Code Online (Sandbox Code Playgroud)

c file stdio

24
推荐指数
2
解决办法
3万
查看次数

查找所有子字符串的出现次数和位置

我正在编写一个程序来解析保存为文本文件的一些数据.我想要做的是找到大海捞针中每根针的位置.我已经可以读取文件并确定出现次数,但我也希望找到索引.

c++ iostream stdio

23
推荐指数
2
解决办法
3万
查看次数

标签 统计

stdio ×10

c ×8

c++ ×3

iostream ×2

feof ×1

file ×1

file-io ×1

filestream ×1

peek ×1

scanf ×1

winapi ×1