标签: stdio

忽略C中的换行符

我正在尝试编写一些读取文件并忽略换行符的代码(\n),到目前为止我有:

c = fgetc(fp);
for(int loop = 0; c != EOF; loop++)
{
    if((c != '\n') && (c != '\\'))
    {
        buffer[loop] = c;
    }
    c = fgetc(fp);
}
Run Code Online (Sandbox Code Playgroud)

但它似乎并没有忽略'\n'位(不确定'\')

对不起代码的布局,该网站似乎不喜欢我的Opera版本:(

编辑:谢谢大家,我已经编了大约6个小时的编码,完全忽略了增量,这就是为什么我认为\n仍然是静止的.

我也不知道\ r,uning Linux但是试图制作跨平台,所以这很有用.

c stdio

1
推荐指数
2
解决办法
2020
查看次数

我在标准库中遇到编译错误.这是怎么回事?

我正在尝试编译一个未指定的软件,我在标准标题中遇到错误,例如stdio.h.错误主要是未声明的标识符,例如_In_.IntelliSense发现它们的定义很好.我应该在哪个方向找出原因?

补充:例如,在一个cpp文件stdio.h中包含第一个文件 - 我之前没有可以看到的定义.没有使用预编译的头文件.我安装的其他内容编译得很好.

c++ std stdio visual-c++

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

C从文件中读取多行

我遇到的问题是使用标准输入从文件中读取多行整数.文件看起来像:

123
423
235
523
..etc
Run Code Online (Sandbox Code Playgroud)

我目前的代码是:

/*
 * Read in the initial puzzle configuration.
 * Each line is 4 characters long:
 *   Row    as a character '0' .. '9'
 *   Column as character '0' .. '9'
 *   Digit  as character '0' .. '9'
 *   Terminating newline.
 * Exits with an error message if there are syntactic
 * or semantic errors with any configuration line.
 */

void configure(FILE *puzzle_file) {
        int row;
        int column;
        int value;

        while((fscanf(puzzle_file, "%i%i%i\n", row, column, …
Run Code Online (Sandbox Code Playgroud)

c scanf stdio

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

stdio的printf和Windows驱动程序

我想在驱动程序代码(DDK)中使用"printf",因此我已经包含了stdio.h.但是编译器说:

error LNK2001: unresolved external symbol __imp__printf
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我在某个地方看到这是不可能的 - 但那太糟糕了 - 我无法相信.为什么我不能在内核代码中使用标准C例程?

  1. 像printf这样的C函数来自静态cstd.lib或AFAIK不是吗?
  2. 为什么WDK会为我提供stdio.h呢?

windows printf driver stdio

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

C stdlib/stdio的阴影函数

我正在写一个游戏,现在我能够通过类及其方法实现文件系统sqlite.为了让生活更容易我已经打算写像一些功能fopen,fclose,fread,rename,等能够影子基础功能,并直接把我的给我的文件系统调用,而不是原来的一个.对于前三个功能,一切都适合我使用这些原型:

File *fopen(String _Filename, String _Mode); // i have my own optimized File struct

void fclose(File *_File);

size_t fread(String *_DstBuf, size_t _ElementSize, size_t _Count, File *_File);

这工作正常,因为我要么返回另一个结构或参数除了a File*而不是a FILE*,但重命名函数似乎有点棘手!

int rename(String _OldFilename, String _NewFilename);

这几乎是相同的原型.除了我使用std::string(typedef'ed String)比const char*!知道我怎么能说服我的编译器使用我的函数或忽略stdio-one?

c++ file-io std stdio shadowing

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

如何理解stdio.h在不同的操作系统上有所不同

首先,我在谈论类UNIX系统.

我看一下Mac OS,Linux,Minix和K&R C书中"FILE"结构的定义,它们都是不同的.

在K&R C书中,很清楚

typedef struct _iobuf{
    int cnt;
    char *ptr;
    char *base;
    int  flag;
    int  fd;
} FILE;
Run Code Online (Sandbox Code Playgroud)

在Mac OS上,它在结构中有更多东西.

在Linux(3.0)上,它是

typedef _IO_FILE FILE;
Run Code Online (Sandbox Code Playgroud)

标题显示"在C++ iostreams之上定义ISO C stdio".嗯...?(Linux上的C是用C++实现的吗?不应该相反吗?)看起来_IO_FILE定义在libio.h中

在Minix上,定义与K&R非常相似.

我的unstanding是stdio.h应该是C的一部分.第一个C编译器是用汇编语言实现的.并且C应该独立于OS类型.

HW上的机器代码 - > asm - > C - >更复杂的C - > UNIX

现在,在不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc.

怎么理解这个?

非常感谢,阿尔弗雷德

c linux operating-system stdio minix

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

getc()不返回carrige返回'\ r'字符

我有一个带有一些示例文本的文本文件"hello.txt".当我在十六进制编辑器中打开文件时,我可以看到换行符的\ r \n字符.但是当我在带有getc()的C程序中读取文件时,\ r \n会以某种方式消失,我只会看到\n字符.

我试图在线搜索和stackoverflow但没有运气.

hello.txt的

Sample
File
Run Code Online (Sandbox Code Playgroud)

码:

#include <stdio.h>

int main()
{
    FILE *fp;
    fp = fopen("hello.txt", "r");

    int character = 0;

    while( (character = getc(fp)) != EOF)
    {
        printf("%.2X ", character);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

53 61 6D 70 6C 65 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)

从十六进制编辑器看到的文件:

53 61 6D 70 6C 65 0D 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)

可以看出,使用getc()函数时,0D0A仅输出0A.

为什么getc()会避免'\ r'字符?如何让它返回给定文件中的EXACT数据,即没有任何转换\ r \n到\n?

c stdio

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

编写C程序在Linux上创建1 MB文件并获取Segmentation Fault

我正在尝试为Linux编写一个简单的C程序,它将生成一个1 MB的文件,但我无法使用此代码.当我尝试运行它时,我得到一个seg错误错误消息,我不确定它出错的地方.我确实有一个预感,它与fseek有关:

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp;
    fp = fopen(argv[0], "w");
    fseek(fp, 1000000 - 1, SEEK_SET);
    fputc('\0', fp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?

c linux stdio

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

C - fprintf和printf内部循环不打印到屏幕

我刚刚发现函数fprintf可以用来在屏幕上打印一些东西.

我在下面有这个最小值,但是它不会向屏幕输出任何内容.为什么?

#include <stdio.h>

int main(void)
{
    int i,j,k;

    for(i=0;i<4;i++)
    {
        for(j=0;j<0;j++)
        {
            for(k=0;k<3;k++)
            {
                printf("test\n");
                fprintf(stderr, "test\n");

            }
        }       
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在运行ubuntu 14.04并按如下方式编译此代码:gcc main.c -o main

c terminal stdio

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

每个转换是否与输入/输出格式说明符相关联C中的序列点?

关于C中序列点的维基百科条目具有以下序列点:

与输入/输出格式说明符关联的每次转换后.例如,在表达式printf("foo%n%d",&a,42)中,在评估%n之后和打印之前有一个序列点42

但C标准也说:

函数指示符的评估顺序,实际参数和实际参数中的子表达式是未指定的,但在实际调用之前有一个序列点.

对于像这样的代码,这两点似乎是矛盾的

int i=1;
printf("%d, %d and %d\n", i++, i++, i--); 
Run Code Online (Sandbox Code Playgroud)

根据每个格式说明符后的维基百科条目,有一个序列点,所以它将打印如下: 1,2,3

但根据C标准中未指明的beaviour条目,它可以打印任何东西.

c stdio operator-precedence undefined-behavior sequence-points

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