C语言中用strstr()函数,截取字符串中我们想要的字符串

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。用strstr可以很方便的截取字符串中我们想要的字符:

 截取字符串的文本如下,ESSID:"tps"  psk:"123" ,我们用strstr截取里面的 tps 和 123 字符:

实现截取字符串:

#include <stdio.h>
#include <string.h>

int main()
{
    //content:
    //ESSID:"tps"
    //psk:"123"
    system("echo \"content:\" > test.txt");
    system("echo \"ESSID:\\\"tps\\\"\" >> test.txt");
    system("echo \"psk:\\\"123\\\"\" >> test.txt");
    FILE *fp = NULL;
    char temp_buff[256] = {0};
    char *buff_p = temp_buff;
    char *temp_p = NULL;
    char *end_p = NULL;
    char essid[128] = {0};
    char pwd[128] = {0};
    char buf[128] = {0};

    if(NULL != (fp = fopen("test.txt", "r"))); //打开文件
    {   
        fread(temp_buff,sizeof(temp_buff),1,fp); //把文件的内容储存到temp_buff里面 content:\n  ESSID:"tps"\n  psk:"123"\n
    }
    
    fclose(fp);

    //截取ESSID:"tps" 中字符串tps
    temp_p = strstr(buff_p, "ESSID");  //指针temp_p定位到ESSID的位置开始的位置,即 E 开始的位置
    if (NULL == temp_p) {
        // /break;
    }else{
        buff_p = temp_p;     //改变buff_p里面的内容从strstr就开始的 ESSID:"tps"\n  psk:"123"\n 到内容的结束
        temp_p = strstr(buff_p,"\""); //指针temp_p定位到 ESSID:"tps"\n 中第一个 “ 的位置
        end_p =strstr(buff_p,"\n");     //把end_p指向ESSID:"tps"\n的 \n 的位置。每一句话的最后都是一个换行符\n, 所以完整的一句应该是ESSID:"tps"\n,而不是ESSID:"tps"
        memcpy(essid, temp_p+1, (end_p-1)-(temp_p+1));  essid存的就是我们想要截取的字符串:tps,拷贝temp_p+1的内容,即“ 后t开始的位置,end_p-1是\n前一位:s,temp_p+1是”的后一位:t,(end_p-1)-(temp_p+1)是拷贝他们之间的字节数
        printf("%s\n", essid);

        //同理我们想要截取密码的字符串,和截取essid中我们想要的字符串是一样的
        buff_p = end_p; 
        temp_p = strstr(buff_p, "psk");
        if (NULL == temp_p) {
            // /break;
        }else{
            buff_p = temp_p;
            temp_p = strstr(buff_p,"\"");
            end_p =strstr(buff_p,"\n");
            memcpy(pwd, temp_p+1, (end_p-1)-(temp_p+1));
            printf("%s\n", pwd);
        }
    }
    return 0;
}

实现的结果如下:

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值