一、问题描述:
当读取配置文件的时候,fgets()一行一行的读取文件后,sscanf()会对读取出来的这行字符串进行截取处理(此时sscanf()使用正则表达式处理字符串),但是当字符串的首位有空格或者‘\t’时候,后续字符串的比较时,会带来不必要的麻烦。
二、举例说明:
(提示:->表示开始 <-表示结尾 实际的配置文件中并不存在,只是为了更好的显示文件中有空格或者tab)
配置文件如下所示,起始位置有空格与'\t':
程序中sscanf()并没有 在正则中处理首位空格 ‘\t’:
在后续的对比操作中会有不必要的麻烦。
因此在fgets()后面,sscanf()前 需要对读出的linebuffer进行首位去除空格 ‘\t’的处理。
三、代码实现:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void trim(char *strIn, char *strOut){
int i, j ;
i = 0;
j = strlen(strIn) - 1;
while(strIn[i] == ' ' || strIn[i] == '\t')
++i;
while(strIn[j] == ' ' || strIn[j] == '\t')
--j;
strncpy(strOut, strIn + i , j - i + 1);
strOut[j - i + 1] = '\0';
}
void main()
{
char *strIn = " this is a test string ";
char strOut[100];
trim(strIn,strOut);
printf("*%s*\n",strOut);
}
当然也可以考虑 用sscanf的正则表达式完成对字符串前后空格、tab的删除。链接如下:
sscanf正则去掉字符串前后空格https://blog.csdn.net/weixin_42167759/article/details/80379430