编写C语言遇到的一些问题4

1.我常用的读写文件函数总结

fopen:打开文件

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

在vs中使用fopen时会报一个错误,因为高版的VS默认不让使用scanf,fopen等函数,说是scanf,fopen等函数不安全,而代替其函数的是scanf_s,fopen_s等函数,后边有个"_s"的形式。

使用字符串相关函数strcpy等也会出现上述问题。

解决方法:

可以在属性——c/c++——预处理器——预处理器定义中添加  _CRT_SECURE_NO_WARNINGS

或者定义宏

#define _CRT_SECURE_NO_WARNINGS

fclose:关闭文件

fprintf:按照参数中指定的格式写入文件中,与printf类似,只不过printf是打在控制台命令行中,fprintf是写入文件中。

fscanf:按照参数中指定的格式从文件中读出数据。

fwrite:按照数据在内存中存储的顺序依次写入文件,每个数据的大小,写入数据的个数在函数参数中都有规定。

fread: 按照数据在文件中存储的形式读出,放到指针指向的内存中,每个数据的大小,写入数据的个数在函数参数中都有规定。

2.指向数组的指针作为出参传入函数时,必须预先分配内存并初始化,否则得不到想要的数据。

当外层函数不知道分配多少内存时,可以传递指针的指针,如下例子所示:

void fun(int**my_data){
    //注意这里并不是想将my_data作为二维数组使用,而是作为指针的指针
    //这里是因为主函数不知道分配多大内存,子函数中才知道,所以放在子函数中分配了
    int data_num=10;
    *my_data=(int*)malloc(sizeof(int)*data_num);
    for(int i=0;i<data_num;i++){
        *my_data[i]=i;
    }
}

int main(void){
    int * data=NULL;
    fun(&data);
    //使用data数据

    //释放data数据
    free(data);
}

3.通过程序依次读写某文件夹中的文件时,可这样处理:

//定义文件名中固定的字符串
char *img_path = "D:/work/shanghai-widefiled-project/data/sea/";
char*img_format = ".bmp";
//依次读取10幅图像
for(int img_index=0;img_index<10;img_index++)
    char img_name[100];
    strcpy(img_name, img_path);
    //将数字转换为字符,sprintf与printf用法类似,只是将内容按照格式写入字符串中
    char img_id[5];
    sprintf(img_id,"%d",img_index);
    strcat(img_name, img_id);
    strcat(img_name, img_format);

C语言中处理字符串没有python那么简单,但C语言中也提供了一些处理字符串的重用的函数,如下表所示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值