diff --git a/Makefile b/Makefile index d9c6229..ffd0375 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ CFLAGS = TARGET = chsrc +TEST_TARGET = test_$(TARGET) #======================= all: @@ -8,8 +9,8 @@ all: @gcc chsrc.c $(CFLAGS) -o $(TARGET) test: - @gcc test_helper.c -o test - @./test + @gcc test_helper.c -o $(TEST_TARGET) + @./$(TEST_TARGET) test_cmd: $(TARGET) ./$(TARGET) list mirror diff --git a/helper.h b/helper.h index bb7088d..b9a7b27 100644 --- a/helper.h +++ b/helper.h @@ -176,7 +176,7 @@ xy_2strjoin (const char* str1, const char* str2) static char* xy_strjoin (unsigned int count, ...) { - size_t al_fixed = 256; + size_t al_fixed = 128; char* ret = calloc(1, al_fixed); // 已分配次数 int al_times = 1; @@ -194,14 +194,26 @@ xy_strjoin (unsigned int count, ...) for(int i=0; i al_cur) { + while (al_need > al_cur) { al_times += 1; al_cur = al_times * al_fixed; + need_realloc = true; + } + // printf("al_times %d, al_need %zd, al_cur %zd\n", al_times, al_need, al_cur); + if (need_realloc) { + ptrdiff_t diff = cur - ret; ret = realloc(ret, al_cur); - if (NULL==ret) { xy_error ("xy: No availble memory!"); return NULL; } + cur = ret + diff; + } + if (NULL==ret) { + xy_error ("xy: No availble memory!"); return NULL; } strcpy(cur, str); + // puts(ret); cur += strlen(str); } va_end(args); diff --git a/test_helper.c b/test_helper.c index e0dfc33..ad41bb0 100644 --- a/test_helper.c +++ b/test_helper.c @@ -2,7 +2,7 @@ * File : test_helper.c * Authors : Aoran Zeng * Created on : <2023-08-30> -* Last modified : <2023-08-30> +* Last modified : <2023-09-02> * * test_helper: * @@ -18,8 +18,9 @@ main (int argc, char const *argv[]) xy_useutf8(); puts(xy_2strjoin("Xi", "'an")); puts(xy_strjoin (2, "Xi", "'an")); - puts(xy_strjoin(3, "中文输出", " XiangYang", " shan shui")); - puts(xy_strjoin(4, "中文输出2", " XianYan", " hao", " feng jing")); + puts(xy_strjoin(3, "屈身守分,", "以待天时,", "不可与命争也")); + puts(xy_strjoin(4, "水落鱼梁浅,", "天寒梦泽深。", "羊公碑字在,", "读罢泪沾襟。")); + puts(xy_strjoin(6, "楚山横地出,", "汉水接天回。", "冠盖非新里,", "章华即旧台。", "习池风景异,", "归路满尘埃。")); xy_success("成功:输出成功内容"); xy_info("信息: 输出信息内容");