C言語読み出しプロファイル

2707 ワード

プロファイル:
a.txt
# ip=sadf
  ip =192.168.246.22
  dns     =                   218.85.157.99 

読み込みルール:
1「#」で始まるものを注釈として読みません
2空行も読み取らない
3'='の両側にスペースを付けることができます
ここではまず使う知識点についてお話しします
1アサーションの使用
assert()マクロの使い方
注意:assertは関数ではなくマクロです.Cのassert.hヘッダファイルにあります.
assertマクロのプロトタイプ定義はでは、条件がエラーを返すと、プログラムの実行が終了し、プロトタイプ定義が次のように機能します.
#include void assert( int expression );
assertの役割は、式expressionを先に計算し、値が偽(すなわち0)の場合、標準エラーストリームstderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了することです.そうしないと、assert()は何の役割もありません.マクロassert()は、通常、プログラムの正常な動作を確認するために使用されます.式の構成が間違っていない場合にのみ真の値になります.デバッグが完了すると、マクロNDEBUGに定義がある場合、マクロassert()の定義が空になるため、ソースコードからassert()文を削除する必要はありません.
2 strtok()--文字列分割関数の使用
ヘッダファイル:#include
定義関数:char*strtok(char*s,const char*delim);
関数の説明:strtok()は文字列を個々のセグメントに分割するために使用される.
パラメータsは分割しようとする文字列を指し、パラメータdelimは分割文字列であり、
strtok()がパラメータsの文字列にパラメータdelimの分割文字を発見すると、その文字は0文字に変更される.
1回目の呼び出しではstrtok()にパラメータs文字列を与える必要があり、以降の呼び出しではパラメータsをNULLに設定.
呼び出しが成功するたびに、次の分割後の文字列ポインタが返される.
戻り値:次の分割後の文字列ポインタを返し、分割できない場合はNULLを返す.
次は具体的なコードです
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
/*             */
char * del_left_trim(char *str) {
    assert(str != NULL);
    for (;*str != '\0' && isblank(*str) ; ++str);
    return str;
}
/*             */
char * del_both_trim(char * str) {
    char *p;
    char * szOutput;
    szOutput = del_left_trim(str);
    for (p = szOutput + strlen(szOutput) - 1; p >= szOutput && isblank(*p);
            --p);
    *(++p) = '\0';
    return szOutput;
}
/*   */
int main(int argc, char **argv) {
    FILE * fp = NULL;
   /*      a.txt*/
    fp = fopen("./a.txt", "r");
   /*��_�^*/
    char buf[64];
    char s[64];
    /*   */
    char * delim = "=";
    char * p;
    char ch;
     while (!feof(fp)) {
        if ((p = fgets(buf, sizeof(buf), fp)) != NULL) {
            strcpy(s, p);
            ch=del_left_trim(s)[0];
           /*       ,          */
            if (ch == '#' || isblank(ch) || ch=='
') continue; /* */ p=strtok(s, delim); if(p) printf("%s", del_both_trim(p)); while ((p = strtok(NULL, delim))) printf("%s ", del_both_trim(p)); printf("
"); } } return 0; }

結果を表示:
ip192.168.246.22
     
dns218.85.157.99

基本的な読み出しプロファイルは、これで終わりです!