linux系统编程:文件编程操作strstr函数----学习和记录(二)

目录

strstr函数:修改文件数据用到

 函数原型:

          函数例子:


strstr函数:修改文件数据用到

例:abcdefg=5

        1.先找到a前面的位置(函数在找到abcdefg后会指向首地址)

        2. a往后移动到g的位置

        3.修改数字"5"的数据

函数原型:

#include <string.h>

char *strstr(const char *haystack, const char *needle);

函数返回值是char *p 类型的指针 找到后会指向首地址
如果找不到则为NULL 空指针

haystack:被查找的目标范围(在哪个部分)
needle:要查找的对象

函数例子:

#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv) //传入要修改的文件
{
	int fdSrc;                 //用来放被修改文件的文件描述符
    char* Buf = NULL;          //存放读取出来的字符串
    if(argc != 2){             //需要两个参数
   		printf("error\n");
    	exit(-1);
    }
    fdSrc = open(argv[1],O_RDWR);              //打开要修改的文件
    int size = lseek(fdSrc,0,SEEK_END);        //计算文件的大小
    lseek(fdSrc,0,SEEK_SET);                   //将光标移动到文件开始位置
    Buf = (char *)malloc(sizeof(char) * size); //为缓冲区开辟空间,大小为一个char的大小的文件大小
    int n_read = read(fdSrc,Buf,size);         //将文件读到buf中
    char *p = strstr(Buf,"abcdefg = ");           //在buf中寻找abcdefg=字符串
    if(p == NULL){                             //判断是否找到
    	printf("NO “LENG = ”\n");
        exit(-1);
    }
    p = p + strlen("abcdefg = "); //如果找到了strstr函数返回的是第一次出现abcdefg=的地址,将地址移动到LENG=的后面
    *p = '6';                  //现在P指向的地址已经到abcdefg = 的最后,在将P的内容修改为'6',注意是'6'
    lseek(fdSrc,0,SEEK_SET);  //将光标移动到最前面,因为上面读已经将光标移动到最后面了,如果不移动光标的话会重新打印一遍文件内容
    int n_write = write(fdSrc,Buf,strlen(Buf));  //将修改了的文件重新写入到原文件中
    close(fdSrc);                                //关闭文件
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值