diff --git a/README.md b/README.md index e613393..8ba717c 100644 --- a/README.md +++ b/README.md @@ -9,5 +9,7 @@ git clone https://github.com/niuyuling/libini cd libini make + +# test gcc -Wall test.c -o test -L./ -lini -static ./test \ No newline at end of file diff --git a/config.ini b/config.ini index 20f43f8..8850372 100644 --- a/config.ini +++ b/config.ini @@ -4,4 +4,8 @@ name=aixiao.me a=10 b=1234567890 -c=1.1234567 +c=1.223445446 + + +[TAC] +e=!@#$%^&*()_+ diff --git a/libini.c b/libini.c index 42560bb..80b0a26 100644 --- a/libini.c +++ b/libini.c @@ -3,19 +3,21 @@ #include #include "libini.h" +#define BUFFER_SIZE 1024 + int getinikeystring(char *title, char *key, char *filename, char *buf) { FILE *fp; int flag = 0; - char sTitle[64], *wTmp; - char sLine[1024]; + char sTitle[BUFFER_SIZE], *wTmp; + char sLine[BUFFER_SIZE]; sprintf(sTitle, "[%s]", title); if (NULL == (fp = fopen(filename, "r"))) { perror("fopen"); return -1; } - while (NULL != fgets(sLine, 1024, fp)) { + while (NULL != fgets(sLine, BUFFER_SIZE, fp)) { if (0 == strncmp("//", sLine, 2)) continue; if ('#' == sLine[0]) @@ -49,20 +51,22 @@ int putinikeystring(char *title, char *key, char *val, char *filename) FILE *fpr; FILE *fpw; int flag = 0; - char sLine[1024], sTitle[32], *wTmp; + char sLine[BUFFER_SIZE], sTitle[BUFFER_SIZE], *wTmp; + char sLine_backup[BUFFER_SIZE]; sprintf(sTitle, "[%s]", title); if (NULL == (fpr = fopen(filename, "r"))) return -1; sprintf(sLine, "%s.tmp", filename); if (NULL == (fpw = fopen(sLine, "w"))) return -1; - while (NULL != fgets(sLine, 1024, fpr)) { + while (NULL != fgets(sLine, BUFFER_SIZE, fpr)) { if (2 != flag) { wTmp = strchr(sLine, '='); if ((NULL != wTmp) && (1 == flag)) { - if (0 == strncmp(key, sLine, strlen(key))) { + strcpy(sLine_backup, sLine); + if (0 == strncmp(key, sLine, strlen(key)) && !(strncasecmp(strtok(sLine_backup, "="), key, strlen(strtok(sLine_backup, "="))))) { flag = 2; - sprintf(wTmp + 1, " %s\n", val); + sprintf(wTmp+1, "%s\n", val); } } else { if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { @@ -80,21 +84,21 @@ int putinikeystring(char *title, char *key, char *val, char *filename) int getinikeyint(char *title, char *key, char *filename) { - char buf[256]; + char buf[BUFFER_SIZE]; getinikeystring(title, key, filename, buf); return atoi(buf); } long int getinikeylong(char *title, char *key, char *filename) { - char buf[256]; + char buf[BUFFER_SIZE]; getinikeystring(title, key, filename, buf); return atol(buf); } float getinikeyfloat(char *title, char *key, char *filename) { - char buf[256]; + char buf[BUFFER_SIZE]; getinikeystring(title, key, filename, buf); return atof(buf); } diff --git a/test.c b/test.c index 582bceb..6c0f039 100644 --- a/test.c +++ b/test.c @@ -4,14 +4,20 @@ int main(void) { char buf[50]; - getinikeystring("CAT", "age", "config.ini", buf); + getinikeystring("CAT", "age", "config.ini", buf); // 字符串 + printf("%s\n", buf); + getinikeystring("CAT", "name", "config.ini", buf); // 字符串 printf("%s\n", buf); - getinikeystring("CAT", "name", "config.ini", buf); - printf("%s\n", buf); - printf("%d\n", getinikeyint("CAT", "a", "config.ini")); - printf("%ld\n", getinikeylong("CAT", "b", "config.ini")); - printf("%f\n", getinikeyfloat("CAT", "c", "config.ini")); + printf("%d\n", getinikeyint("CAT", "a", "config.ini")); // 整型 + printf("%ld\n", getinikeylong("CAT", "b", "config.ini")); // 长整型 + printf("%f\n", getinikeyfloat("CAT", "c", "config.ini")); // 浮点型(默认小数点后6位) + + + putinikeystring("TAC", "e", "!@#$%^&*()_+", "config.ini"); // 写入 + getinikeystring("TAC", "e", "config.ini", buf); + printf("%s\n", buf); + return 1; } \ No newline at end of file