C strlen指针与数组

C strlen指针与数组,c,string,macos,pointers,memory-management,C,String,Macos,Pointers,Memory Management,我在使用指针与静态数组时遇到了一些问题。我被困在这个错误中: void LZWCompress(FILE* file, char minCodeSize, char *pixels, int area) { int k = ++minCodeSize, i, len = DEFAULT, jump = 0, dicLen; lzwDict *dictionary = NULL, *s, *temp; char *curr, next[2], *buffer; dicLen = initia

我在使用指针与静态数组时遇到了一些问题。我被困在这个错误中:

void LZWCompress(FILE* file, char minCodeSize, char *pixels, int area)
{

int k = ++minCodeSize, i, len = DEFAULT, jump = 0, dicLen;
lzwDict *dictionary = NULL, *s, *temp;

char *curr, next[2], *buffer;

dicLen = initializeDictionary(&dictionary, minCodeSize);
for(i = 0; i < area; i++)
{
    if(dicLen + 1 >= pow(2, k))
        k = k + 1;

    curr = (char*) malloc(sizeof(char) * DEFAULT);
    curr[0] = pixels[i];
    curr[1] = '\0';

    printf("strlen %lu  %s\n", strlen(curr)); ### strlen(curr) = 0 ? WH ? ###
    if((i + 1) > area)
    {
        //outputs curr
        break; 
    }


    len = len + 1;
    jump = jump + 1;

    next[0] = pixels[i + jump];
    next[1] = '\0';

    buffer = (char*) malloc(sizeof(char) * len);
    printf("%lu %lu %lu \n", strlen(buffer), strlen(curr), strlen(next)); ### prints out "0 0 1" ###
(…)代码继续

为什么在使用数组(下一步[2])时会得到预期的结果,而在使用指针(*curr,*buffer)时却没有得到预期的结果

如果相关的话,我正在使用OSX优胜美地。

根据strlen:

C字符串的长度由终止空字符决定:C字符串的长度等于字符串开头和终止空字符之间的字符数(不包括终止空字符本身)

这不应与保存字符串的数组大小混淆。


如果像素[i]等于0,strlen(next)将为0。

预期结果和具体错误是什么?这段代码非常可怕。它应该做什么?
    buffer = strcat(curr, next);
    HASH_FIND_STR(dictionary, buffer, s);

    if(s)
    {
        printf("YOLO\n");
        do{
            jump = jump + 1;

            if(i + jump >= area)
                exit(-1);

            printf("%d \n", len);
            curr = (char*) realloc(curr, sizeof(char) * len); ### Here i get Abort Trap 6 ###