Linux的学习2

文章介绍了C语言中main函数的参数argc和argv的含义,它们分别表示命令行参数的数量和指针数组。通过示例展示了如何在程序中使用这两个参数读取和处理命令行输入,包括复制文件和修改文件内容。还提到了strstr函数在查找和替换字符串中的子串时的作用。
摘要由CSDN通过智能技术生成

int main(int argc,char **argv)中的两个参数是什么?

主函数中的参数:

int main(int argc,char **argv){}

main中的argc是指我们在终端中使用的字段的个数。

main中的argv是一个二级指针,指向的是字符数组的指针。

例如我们在linux中使用 cp demo1.c demo2.c的时候

有cp,demo1.c,demo2.c  三个字段,所以argc的值为3

argv指向的是一个字符数组。那么cp就是argv[0]中的内容。demo1.c就是argv[1]的内容,demo2.c就是argv[2]的内容 

举个例子:

 #include<stdio.h>
 int main(int argc,char **argv)
 {
 
     printf("一共有%d个字段\n",argc);
     printf("第一个字段是%s\n",argv[0]);
     printf("第二个字段是%s\n",argv[1]);
     printf("第三个字段是%s\n",argv[2]);
     return 0;
 }

输出结果为:

通过这个知识,我们可以做一个类似于cp功能的文件。例子如下:

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
int main(int argc,char **argv)
{
    int fd1;//初始文件的文件描述符
    int fd2;//复制后的目标文件的文件描述符
    int size;//初始文件的内容大小
    char *readBuf=NULL;
    fd1=open(argv[1],O_RDWR);
    size=lseek(fd1,0,SEEK_END);//返回fd1的大小给size
    lseek(fd1,0,SEEK_SET);//光标已经到最后了,所以得把它还原回去
    readBuf=(char *)malloc(sizeof(char)*size+8);//加8是为了防止一些意外,怕因为一些别的原因导致内存不够
    read(fd1,readBuf,size);
    fd2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);
    write(fd2,readBuf,size);
    close(fd1);
    close(fd2);
    return 0;
}

第二个应用,如果文件中有字符想要修改,应该如何操作

例如:文本中为:李华学号是2,我想改成李华学号是3。该如何操作

首先这里得先补充一个函数的了解

strstr()函数的介绍

 

strstr()函数的参数:

*haystack:需要修改的字符串的地址

*needle:字符串中的子字符串(可以理解为字符串中的某一个词的字段)

 strstr会返回一个指针,指向你输入的子字符串的首位置

了解完以后就可以开始写代码了。代码如下:

 #include<sys/types.h>
 #include<sys/stat.h>
 #include<fcntl.h>
 #include<unistd.h>
 #include<stdlib.h>
 #include<stdio.h>
 #include<string.h>
 int main(int argc,char **argv)
 {
     int fd;
     int size;
     char *readBuf;
     char *p;
     if(argc!=4){printf("操作失败\n");exit(-1);}
     fd=open(argv[1],O_RDWR);
     size=lseek(fd,0,SEEK_END);//把原文件中内容的大小赋值给size
     lseek(fd,0,SEEK_SET);
     readBuf=(char *)malloc(sizeof(char)*size+8);
     read(fd,readBuf,size);
     lseek(fd,0,SEEK_SET);//因为读取完以后,光标又到尾巴了,所以必须归位
     p=strstr(readBuf,argv[2]);//去找我们想要找的子字符串的位置
     p=p+strlen(argv[2]);//使指针指向我们想要修改的位置
     *p=*argv[3];//将用户想要输入的东西赋值给当前位置
     write(fd,readBuf,size);
     close(fd);
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值