精华内容
下载资源
问答
  • fopen的打开模式在C语言文件打开方式有这么...只能写,如果文件存在则将长度清零,否则新建文件,这种句柄通过seek之后,seek位置之前的文件数据全部变成0x00w+ 同w选项,只不过多了一个可读功能a 这种方式打开的...

    fopen的打开模式

    在C语言中文件打开方式有这么几种:

    r 以只读方式打开文件,只能读不能写,往文件中写是没有任何效果的

    r+ 可以读,也可以写,文件打开的时候,指向文件开头,可以通过seek改变读写位置

    w 这种方式打开的文件句柄,只能写,如果文件存在则将长度清零,否则新建文件,这种句柄通过seek之后,seek位置之前的文件数据全部变成0x00

    w+ 同w选项,只不过多了一个可读功能

    a 这种方式打开的文件,可以写,但是位置在文件末尾,即使往回seek也没有用,数据还是从文件末尾开始附加

    a+ 同a选项,多了可读的功能

    另外还有2个选项,可以与上面的6个选项复合使用,一个是t表示以文本的方式打开文件(默认是t),一个是b表示以二进制的方式打开文件,t和b是互斥的不能同时使用。当与b组合时,有这么几种方式:wb、ab、rb、wb+、ab+、rb+,而a,w,r这几个选项是不能组合使用的,其中a,w都表示写文件,只不过一个在文件尾,一个在文件开始处,r表示读文件。我试过将a,w,r几个两两组合使用,发现下面的现象:

    wr 与w效果一样

    rw与r效果一样

    aw与a效果一样

    wa 与w效果一样

    ar与a效果一样

    ra与r效果一样

    可以看出来当a,w,r在一起组合使用的时候,其后面的选项实际上好像是被忽略了

    问题的解决方法:rb+打开文件

    所以解决文章开头提出来的问题,应该使用 rb+ 的方式打开文件,这种方式打开的文件,可读,可写,打开之后写指针在文件开始处,可以任意seek,而seek之后写的内容会覆盖被写的内容,其他没有写到的内容不会有改变。

    测试程序

    //程序测试结果在ubuntu linux下运行获得

    #include

    #include

    int main()

    {

    //文件原始数据

    //00 01 02 03 04 05 06 07 08 09

    //下面每一个fopen前面注释中的数据是以该方式打开文件,写文件之后文件的内容

    //00 00 00 00 CC DD

    //FILE * file = fopen("./test.data","wb+");

    //00 00 00 00 CC DD

    //FILE * file = fopen("./test.data","wb");

    //00 01 02 03 CC DD 06 07 08 09

    FILE * file = fopen("./test.data","rb+"); //这种是正确的做法

    //00 01 02 03 04 05 06 07 08 09

    //FILE * file = fopen("./test.data","rb");

    //00 01 02 03 04 05 06 07 08 09 CC DD

    //FILE * file = fopen("./test.data","ab");

    //00 01 02 03 04 05 06 07 08 09 CC DD

    //FILE * file = fopen("./test.data","ab+");

    //00 00 00 00 CC DD

    //FILE * file = fopen("./test.data","wr");

    //00 01 02 03 04 05 06 07 08 09

    //FILE * file = fopen("./test.data","rw");

    //00 01 02 03 04 05 06 07 08 09 CC DD

    //FILE * file = fopen("./test.data","aw");

    //00 00 00 00 CC DD

    //FILE * file = fopen("./test.data","wa");

    //00 01 02 03 04 05 06 07 08 09 CC DD

    //FILE * file = fopen("./test.data","ar");

    //00 01 02 03 04 05 06 07 08 09

    //FILE * file = fopen("./test.data","ra");

    if(file!=NULL)

    {

    char buffer[]={0xCC,0xDD};

    fseek(file,4,SEEK_SET);

    fwrite(buffer,1,sizeof(buffer),file);

    fclose(file);

    }

    return 0;

    }

    修改C中二进制文件中的一些字节

    有没有办法改变二进制文件中单个字节的值?我知道如果以r b模式打开文件,光标将位于现有文件的开头,您在该文件中写入的任何内容都将覆盖现有内容.

    但我想在一个文件中只改变1个字节.我想你可以复制不应修改的文件内容,并在正确的位置插入所需的值,但我想知道是否还有其他方法.

    我希望实现的一个例子:

    将第3个字节更改为67

    初始档案:

    00 2F 71 73 76 95

    写入后的文件内容:

    00 2F 67 73 76 95

    使用fseek移动到文件中的位置:

    FILE *f = fopen( "file.name", "r+b" );

    fseek( f, 3, SEEK_SET ); // move to offest 3 from begin of file

    unsigned char newByte = 0x67;

    fwrite( &newByte, sizeof( newByte ), 1, f );

    fclose( f );

    到此这篇关于c语言中如何修改文件中间的几个字节的文章就介绍到这了,更多相关修改文件中间字节内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    展开全文
  • C语言文件操作

    2016-01-11 23:04:00
    C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作。  操作文件,我们得需要知道什么?当然是路径和文件名。  首先我需要知道我操作的文件在哪里,叫什么名字。在C语言中还存在一个打开...

      C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作。

      操作文件,我们得需要知道什么?当然是路径文件名

      首先我需要知道我操作的文件在哪里,叫什么名字。在C语言中还存在一个打开方式的问题。是翻开?扭开?这里在后面一一介绍。

      1.打开文件

      函数:fopen

      函数原型:FILE* fopen(const char* path,const char* mode);

      返回的是一个文件指针。

     

      2.关闭文件

      函数:fclose

      函数原型:int fclose(FILE* stream);

      返回一个int型,这个就是告诉你该文件关闭成功与否。那么是不是有一个信息来表示文件打开成功与否?

      是的,很聪明。

      文件打开成功与否,当我们调用fopen去打开一个文件的时候,此时,将文件信息存入文本流中,如果成功便返回文件流指针,如果失败,就返回NULL。

      NULL这个东西永远都是那么特殊。

     

      3.读取一个字符

      如何去读取这个文件中的数据呢?

      在输入的时候有getchar()来获取输入,那么对于文件的获取有类似的。

      int fgetc(FILE* stream);

      如何判断一个文件到达最后了呢?很显然有个标志来标示文件的结束,即文件结束符-->EOF,如何记忆?End of file。你看全部是大写,是不是和宏很像?

      不错,它就是一个宏。至于值是多少,printf出来就知道了。

     

      4.输出一个字符

      当然,可以用printf("%c",a);的方式来输出。

      也可以采用putchar()的方式来输出。看自己喜好。

      那么以上文件的基本操作,汇聚在一个程序里面,可以这样来写。

      PS:此处用到命令行输入参数,不懂的这里可以介绍以下。

      main()函数的原型:

      int main(int argv,char* argv[]) //后面的当然想怎么写就怎么写,上面argv[][]等等,个人喜好。

      输入参数的时候,先输入argv[],后输入总字符串的个数。(包含最后的数字。)

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int main(int argc, char* argv[])
     5 {
     6     int a = 1;//直接初始化为1,不考虑错误处理等情况,下同。
     7     int ch; //获取字符
     8     FILE* fp = NULL;//文件流指针
     9     //循环读取通过命令行输入的文件,并输出。
    10     while( ( (fp=fopen(argv[a],"r")) != NULL) && (a < argc))
    11     {
    12         //判断是否到达文件结尾
    13         while((ch = fgetc(fp)) !=EOF )
    14         {
    15             //putchar(ch);
    16             printf("%c",ch);
    17         }
    18         //下一个文件
    19         a++;
    20         //关闭文件
    21         fclose(fp);
    22         //打一个换行,隔开文件。
    23         printf("\n");
    24     }
    25 }
    View Code

      以上的例子只是简单的文件操作,当然也是基础,当然减少了很多错误处理。

      同时,还有一些其他的接口。

      以上只是一个一个的输入,明显满足不了要求。那如何才能输入字符串呢?这是一个问题,首先将函数列举出来,然后再举出例子。 

    转载于:https://www.cnblogs.com/ply616/p/5122904.html

    展开全文
  • C语言解析wav文件格式

    千次阅读 2020-01-21 21:18:36
    一个wav文件的二进制解析: 二进制文件,本质上就是一种使用二进制方式存储文件内容的文件统称,我们前面有讲过使用记事本等工具打开之后看到的是乱码,那么我们怎么分析他呢,可以使用UltraEditor,HxD,C32Asm...

    目录

    C语言解析wav文件

    1.wav文件的二进制格式解析

    1.1 RIFF chunk(资源互换文件格式块)

    1.2 第一个子块fmt(描述数据子块中声音信息的格式)

    1.3 第二个子块data(附加块,可选)

    1.4 第三个子块data(实际音频数据块)

    2. C语言解析wav文件

    2.1 主要使用到的C库函数

    (1)fopen(用于打开文件)

    (2)fread和fwrite(用于读写打开的文件)

    2.2 解析wav文件代码

    头文件(wave.h):

    解析wav的C代码(wave.c):


    C语言解析wav文件

    接下来在了解了wav文件的有关概念后,我们将通过学习C语言的有关函数库进行wav文件的一些元数据提取出来备用。

    1.wav文件的二进制格式解析

    一个wav文件的二进制解析:

    二进制文件,本质上就是一种使用二进制方式存储文件内容的文件统称,我们前面有讲过使用记事本等工具打开之后看到的是乱码,那么我们怎么分析他呢,可以使用UltraEditor,HxD,C32Asm等等。比如我这里使用HxD打开Windows 7的关机音乐(C:\Windows\Media\Windows Shutdown.wav)就是这个样子,左边就是这个WAV音频文件的十六进制表示,右边则是这个十六进制数字对应的ASCII表示由于像00之类的数字在ASCII中并没有有效的图像来显示,所以在这个界面的右边显示的就是一个点。(ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9、标点符号)

     在数据区中,由于一开始wav文件是静音的,所以开头的采样数据全部都是0

     

    ss

    WAVE文件本质上就是一种RIFF格式,它可以抽象成一颗树(数据结构的一种)来看。

    我们看到这张图上面,从上到下分别对应着二进制数据在文件中相对于起始位置的偏移量。每一个格子对应一个字段field size表示每个字段所占据的大小,根据这个大小以及当前的偏移量,我们也可以计算出下一个字段的起始地址(偏移量)。wav文件格式也可以用如下表示:

     

    WAV 是Microsoft开发的一种音频文件格式,它符合上面提到的RIFF文件格式标准,可以看作是RIFF文件的一个具体实例。既然WAV符合RIFF规范,其基本的组成单元也是chunk。一个WAV文件通常有三个chunk以及一个可选chunk,其在文件中的排列方式依次是:RIFF chunk,Format chunk,Fact chunk(附加块,可选),Data chunk。各个chunk中字段的意义如下:

    1.1 RIFF chunk(资源互换文件格式块)

    (1)ChunkID

    用以标识块中所包含的数据。如:RIFF,LIST,fmt,data,WAV,AVI等,由于这种文件结构最初是由 Microsoft 和 IBM 为PC机所定义,RIFF文件是按照小端 little-endian 字节顺序写入的。

    RIFF的数据域的起始位置是一个4字节码(FOURCC),用于标识其数据域中chunk的数据类型,如第一个图中的RIFF就是标识本文件为RIFF格式,可以嵌套别的chunk。

    PS:FourCC 全称为Four-Character Codes,是一个4字节32位的标识符,通常用来标识文件的数据格式。

    (2)Chunk Size

    存储在data域中的数据长度,不包含 Chunk ID 和 Chunk Size 本身的大小。

    (3)Format(文件格式类型)

    所有 WAV 格式的文件此处为字符串"WAVE",标明该文件是 WAV 格式文件。

    1.2 第一个子块fmt(描述数据子块中声音信息的格式)

    (1)Subchunk1ID

    第一个子chunk的Subchunk1ID在WAV文件中恒定为fmt,表示该subchunk的内容为该WAV音频文件的一些元数据,也就是该WAV音频的一些格式信息。

    (2)Subchunk1 Size

    格式块长度。其数值不确定,取决于编码格式。可以是 16、 18 、20、40 等。

    (3)AudioFormat

    这个字段一般为1,表示这个WAV音频为PCM编码。

    (4)NumChannels

    该WAV音频文件的声道数量。

    (5)SampleRate

    采样频率。每个声道单位时间采样次数。常用的采样频率有 11025, 22050 和 44100 Hz。

    (6)ByteRate

    数据传输速率。该数值为:声道数×采样频率×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。

    (7)BlockAlign

    数据块对齐单位。

    采样帧大小。该数值为:声道数×位数/8。播放软件需要一次处理多个该值大小的字节数据,用该数值调整缓冲区。

    则是每个block的平均大小,它等于NumChannels * BitsPerSample/8。

    (8)BitsPerSample

    则为每秒采样比特,有的地方称它为量化精度或者PCM位宽。

    存储每个采样值所用的二进制数位数。常见的位数有 4、8、12、16、24、32。

    1.3 第二个子块data(附加块,可选)

    1、采用压缩编码的WAV文件,必须要有Fact chunk,该块中只有一个数据,为每个声道的采样总数。

    2、当WAV文件采用非PCM编码时,使用的是扩展格式块,它是在基本格式块fmt之后扩充了一个的数据结构。

    3、Fact chunk前4个字节为id,为"fact";然后是4字节的size,表示本块包含数据的多少(不包含id 和size);

    Data: 4字节数值,为每个声道的采样总数,可用与Sample rate一起用来计算波形长度。PS:当wav音频文件时是别的格式转化来的,此时data区内容是“WAVE”的四字节的ASCII码。

    一般Fact chunk一共12字节。

    Fact chunk

    • id
      FOURCC 值为 'f' 'a' 'c' 't'
    • size
      数据域的长度,4(最小值为4)
    • 采样总数 4字节

    1.4 第三个子块data(实际音频数据块)

    Subchunk2ID

    在WAV文件中恒定为data,也就是这个WAV音频文件的实际音频数据,说专业一点,这里面存储的是音频的采样数据。

    但是我们的音频如果是双声道,那么实际上某一个采样时刻采样的数据是由左声道和右声道共同组成的。而这个共同组成的采样我们把他叫做block。前面有讲到BlockAlign = NumChannels * BitsPerSample / 8,这个现在就很好理解了,至于为什么末尾要除以8,这是因为计算机中是以8个二进制数表示一个字节,所以要除以8来求出字节数。

    Data chunk

    • id
      FOURCC 值为'd' 'a' 't' 'a'
    • size
      数据域的长度
    • data
      具体的音频数据存放在这里

    2. C语言解析wav文件

    2.1 主要使用到的C库函数

    (1)fopen(用于打开文件)

    相关函数

    open(linux系统下常用)

    fclose

    函数原型:int fclose( FILE *fp );

    返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)

    表头文件

      #include<stdio.h>

    定义函数

       FILE * fopen(const char * path,const char * mode);

    函数说明

      返回值文件顺利打开后,指向该流的文件指针就会被返回。

      参数path:字符串包含欲打开的文件路径及文件名

           参数mode:字符串则代表着流形态。

    mode有下列几种形态字符串:

    • r 打开只读文件,该文件必须存在。

    • r+ 打开可读写的文件,该文件必须存在。

    • w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

    • w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

    • a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

    • a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

    • 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

    附加说明 

      一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理

    (2)fread和fwrite(用于读写打开的文件)

    一般调用形式

      fread(buffer,size,count,fp);

      fwrite(buffer,size,count,fp);

    说明

      如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0

      (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

      (2)size:要读写的字节数;

      (3)count:要进行读写多少个size字节的数据项;

      (4)fp:文件型指针。

    注意:

      1 完成次写操(fwrite())作后必须关闭流(fclose());

      2 完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;

    2.2 解析wav文件代码

    头文件(wave.h):

    结构体:由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体(struct)。

    结构体可以被声明为变量指针数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

    头文件主要包含了四个结构体,WAV_RIFF结构体相当于RIFF块,三个元素分别是:

    (1)文档标识:大写字符串"RIFF",标明该文件为有效的 RIFF 格式文档。

    (2)文件数据长度:从下一个字段首地址开始到文件末尾的总字节数。该字段的数值加 8 为当前文件的实际长度。

    (3)文件格式类型:所有 WAV 格式的文件此处为字符串"WAVE",标明该文件是 WAV 格式文件。

    WAV_FMT结构体即是上述的wav文件的第一个子块(fmt-chunk)。

    WAV_DATA结构体是第三个子块(data-chunk)。

    WAV_FORMAT是一个包含前面三个结构体的结构体。

    typedef struct WAV_RIFF {
        /* chunk "riff" */
        char ChunkID[4];   /* "RIFF" */
        /* sub-chunk-size */
        uint32_t ChunkSize; /* 36 + Subchunk2Size */
        /* sub-chunk-data */
        char Format[4];    /* "WAVE" */
    } RIFF_t;
    
    typedef struct WAV_FMT {
        /* sub-chunk "fmt" */
        char Subchunk1ID[4];   /* "fmt " */
        /* sub-chunk-size */
        uint32_t Subchunk1Size; /* 16 for PCM */
        /* sub-chunk-data */
        uint16_t AudioFormat;   /* PCM = 1*/
        uint16_t NumChannels;   /* Mono = 1, Stereo = 2, etc. */
        uint32_t SampleRate;    /* 8000, 44100, etc. */
        uint32_t ByteRate;  /* = SampleRate * NumChannels * BitsPerSample/8 */
        uint16_t BlockAlign;    /* = NumChannels * BitsPerSample/8 */
        uint16_t BitsPerSample; /* 8bits, 16bits, etc. */
    } FMT_t;
    
    typedef struct WAV_DATA {
        /* sub-chunk "data" */
        char Subchunk2ID[4];   /* "data" */
        /* sub-chunk-size */
        uint32_t Subchunk2Size; /* data size */
        /* sub-chunk-data */
    //    Data_block_t block;
    } Data_t;
    
    //typedef struct WAV_data_block {
    //} Data_block_t;
    
    typedef struct WAV_FORMAT {
       RIFF_t riff;
       FMT_t fmt;
       Data_t data;
    } Wav;  

    解析wav的C代码(wave.c):

    (1)struct类型里面我用的是uint32_t等类型,而不是传统的int,short等等,这是为了考虑到不同的编译器,不同的平台下对于int类型分配的内存空间不一致的问题。而这些类型是由stdint.h头文件提供的,因此我们需要在头部导入它。

    #include <stdio.h>
    #include <stdint.h>
    #include <stdlib.h>
    #include "wave.h"
    
     int main()
     {
         FILE *fp = NULL; //定义文件指针
        
        实例化四个结构体
         Wav wav;
         RIFF_t riff;
         FMT_t fmt;
         Data_t data;
     
        打开测试wav文件并做出错处理
         fp = fopen("test.wav", "rb");
         if (!fp) {
             printf("can't open audio file\n");
             exit(1);
         }
    
        //读取文件
         fread(&wav, 1, sizeof(wav), fp);
         
         riff = wav.riff;
         fmt = wav.fmt;
         data = wav.data;
    
         //输出RIFF块信息
         printf("ChunkID \t%c%c%c%c\n", riff.ChunkID[0], riff.ChunkID[1], riff.ChunkID[2], riff.ChunkID[3]);
         printf("ChunkSize \t%d\n", riff.ChunkSize);
         printf("Format \t\t%c%c%c%c\n", riff.Format[0], riff.Format[1], riff.Format[2], riff.Format[3]);
         
         printf("\n");
         
        //输出格式子块信息
         printf("Subchunk1ID \t%c%c%c%c\n", fmt.Subchunk1ID[0], fmt.Subchunk1ID[1], fmt.Subchunk1ID[2], fmt.Subchunk1ID[3]);
         printf("Subchunk1Size \t%d\n", fmt.Subchunk1Size);
         printf("AudioFormat \t%d\n", fmt.AudioFormat);
         printf("NumChannels \t%d\n", fmt.NumChannels);
         printf("SampleRate \t%d\n", fmt.SampleRate);
         printf("ByteRate \t%d\n", fmt.ByteRate);
         printf("BlockAlign \t%d\n", fmt.BlockAlign);
         printf("BitsPerSample \t%d\n", fmt.BitsPerSample);
         
         printf("\n");
     
        //输出数据块信息
         printf("blockID \t%c%c%c%c\n", data.Subchunk2ID[0], data.Subchunk2ID[1], data.Subchunk2ID[2], data.Subchunk2ID[3]);
         printf("blockSize \t%d\n", data.Subchunk2Size);
         
         printf("\n");
    
        //输出wav文件的时长
         printf("duration \t%d\n", data.Subchunk2Size / fmt.ByteRate);
    
        fclose(fp);
     }

    将以上代码gcc编译通过后,执行得到的测试结果如下:

    通过测试结果分析可知:

    (1)ChunkID是RIFF格式文件,数据域的大小一共有126756个字节(不包含ChunkID和ChunkSize),文件格式类型是wav文件。

    (2)fmt表示存储的wav文件的一些元数据,格式块的长度位16,AudioFormat为1表示为PCM编码,NumChannels表示声道数是单声道,采样频率为44100 kHz,数据传输速率为88200Khz*bit(为声道数×采样频率×BitsPerSample(量化精度)/8),数据块对齐单位(或者叫做采样帧大小)是2字节(声道数×位数/8),最后BitsPerSample(量化精度)是16bit/s。

    (3)剩下的blockID为data是数据块,数据块大小为126720字节。本文件时长为1秒。

     

    参考博客:

    (1)C语言解析WAV音频文件

    (2)wav文件格式分析与详解

    (3)RIFF格式解析

    展开全文
  • 这是一个程序中的一部分,有一个很大的.csv数据文件,我可以调用其中的任意一行的内容,可是数据是以char类型进行存储的,而且每行开始都有一个编号(例如ENSG0001)而且由于csv文件的特性每一个数据后面都有一个...
  • mac系统上运行c语言文件

    千次阅读 2019-03-19 17:02:11
    听说前端必须要学会c语言。没办法只好硬着头皮去网上学习...现在我想运行其中的一个pc.c这个文件。 第一步打开mac的终端软件。 2.cd 到提定的文件里面查看你要运行的文件 3.可以通过ls查看myc文件夹下面有多少文...

    听说前端必须要学会c语言。没办法只好硬着头皮去网上学习了下c的基础。
    可是不知道怎么在mac运行。还好今天搞出来了。在这里做个小笔记

    在我电脑的桌上有一个myc文件夹。这个文件夹下面还有一个myc的文件夹然后里面装载了一些文件。
    在这里插入图片描述

    现在我想运行其中的一个pc.c这个文件。
    第一步打开mac的终端软件。
    在这里插入图片描述
    在这里插入图片描述
    2.cd 到提定的文件里面查看你要运行的文件
    在这里插入图片描述
    3.可以通过ls查看myc文件夹下面有多少文件。在这里插入图片描述
    4.通过gcc来运行c文件
    我要运行pc.c这个文 件
    命令如下

    gcc  -o arr  pc.c   //这里的arr是自定义的别名叫什么都可以
    

    5.gcc -o arr pc.c 输入完成后回车
    在这里插入图片描述

    6.通过./arr 别名来访问pc.c
    在这里插入图片描述
    在这里插入图片描述
    pc.c的代码如下(基础代码)

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {   
    	     char name2[32]="admin";
             char name[32];
            int length;
    		 int res;
    		 printf("请输入你的名字\n");
    		 // gets(name);
    		 fgets(name,sizeof(name),stdin);
    		 length=strlen(name)-1;
    		 printf("你名字的长度是%d\n",length);
    		 //对比两个值是否相等 strncmp的结果0代表相等
    		 res=strncmp(name,name2,strlen(name2));
    		 printf("%d\n",res);
    		 if(res==0)
    		 {
    				printf("用户名正确欢迎回来%lu\n",sizeof(name2));
    		 }else{
    			 printf("用户名%lu错误%lu\n",sizeof(name),sizeof(name2));
    		 } 
    	 
    	 return 0;
    	 
    	 
    }
    
    展开全文
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
  • 在练习文件操作的过程中 我写了一个读取文件的代码(“文件操作”是程序和项目的名字) 这份代码在 VS2019 工具——命令行——开发者命令提示 出现的cmd方框里写入命令 文件操作 123.txt 可以正常工作显示文本文件...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • C语言编程要点

    2017-09-18 00:10:37
    4.13. 怎样打开一个同时能被其它程序修改的文件? 69 4.14. 怎样确保只有你的程序能存取一个文件? 71 4.15. 怎样防止其它程序修改你正在修改的那部分文件内容? 71 4.16. 怎样一次打开20个以上的文件? 72 4.17. 怎样...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 用函数fopen_s打开数据文件

    万次阅读 多人点赞 2015-06-06 13:24:33
    ## **用函数fopen_s打开数据文件** ##学习C语言,对文件的输入和输出,打开一个数据文件,一般教材用fopen函数,但是一些编译器编译无法通过,笔者用的Vs2013,提示用fopen_s函数代替,fopen_s函数怎么用呢?...
  • 繁忙的考试月终于过去了,终于能专心来学点东西了。 在C语言期末考试的时候发现了C语言我还遗漏了一个重要的知识点——C语言的文件访问没有学习,现在来补...对一个文件的访问首先要打开一个文件 FILE* pfile = fopen
  • 一个文件之前,每份文件都已被打开、读取并经过处理。 处理包括读取文件,将其分成一行行的文字,然后将每行 解析成零或更多的符号。然后用已找到的符号字符串变量值 调用 For 循环。以默认方式,/F 通过每个...
  • 协议默认模式是一个标准的 ARQ,需要通过配置打开各项加速开关: 工作模式: int ikcp_nodelay(ikcpcb *kcp, int nodelay, int interval, int resend, int nc) nodelay :是否启用 nodelay模式,0不启用;1启用。...
  • 实验过程:实验包里有三个文件,分别是二进制可执行文件bomb,C语言源程序文件bomb.c以及一个README-bomblab.txt文件。分别打开看了一下,C语言源程序文件bomb.c文件不是完整的那种C代码文件,她只是给出了一些入口...
  • FTP协议使用

    2020-09-18 20:12:48
    FTP协议大家都知道是文件传输协议,那这个协议到底是怎么样的呢,怎么C语言是实现一个客户端呢? 我想通过这篇文章你能够理解FTP协议。... 主动连接:客户端打开一个数据端口给服务器连接 ...
  • PHP变量在内核中的存储方式

    千次阅读 2016-10-28 19:30:23
    但是PHP是使用C语言编写的,而C语言是强类型的语言,每个变量都有固定类型,不能随意改变变量的类型(可以通过强类型转换改变,不过有可能出现问题),在Zend引擎中是怎么做到一个变量保存任何的数据类型呢?打开...
  • 4.13 怎样打开一个同时能被其它程序修改的文件? 4.14 怎样确保只有你的程序能存取一个文件? 4.15 怎样防止其它程序修改你正在修改的那部分文件内容? 4.16 怎样—次打开20个以上的文件? 4.17 怎样避开...
  • C 标准I/O库粗略实现

    2020-12-08 19:40:13
    缓冲区剩余的字符数cnt、下一个字符的位置ptr、缓冲区的位置base、文件访问模式flag、文件描述符fd。 其中文件描述符就是系统调用open返回的文件描述符fd,是int类型。ptr与base上面图中已经展示了。cnt是缓冲...
  • 93 重定向标准输出stdout到一个文件 94 main()的参数:argc和argV 95 使用if语句控制输出 96 打开文件 97 使用文件I/O函数 98 加入while循环 99 向程序中加入函数 100 使用for循环 101 编译命令行选项 102 加入第二...
  • 93 重定向标准输出stdout到一个文件 94 main()的参数:argc和argV 95 使用if语句控制输出 96 打开文件 97 使用文件I/O函数 98 加入while循环 99 向程序中加入函数 100 使用for循环 101 编译命令行选项 102 加入第二...
  • 93 重定向标准输出stdout到一个文件 94 main()的参数:argc和argV 95 使用if语句控制输出 96 打开文件 97 使用文件I/O函数 98 加入while循环 99 向程序中加入函数 100 使用for循环 101 编译命令行选项 102 加入第二...
  • 93 重定向标准输出stdout到一个文件 94 main()的参数:argc和argV 95 使用if语句控制输出 96 打开文件 97 使用文件I/O函数 98 加入while循环 99 向程序中加入函数 100 使用for循环 101 编译命令行选项 102 加入第二...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题71 如何读取一个文件 75 面试题72 文件输入输出有哪几种方式 76 6.3 异常与错误 77 面试题73 什么是异常 77 面试题74 如何抛出和捕捉异常 78 第7章 预处理以及内存管理(教学视频:28分钟) 80 7.1 宏定义 80 ...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

怎么通过c语言打开一个文件

c语言 订阅