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;
}
实现的结果如下: