簡體   English   中英

從C函數獲取2D字符數組

[英]Getting 2d char array from function in c

我想按空格分割我的字符字符串,這是我的代碼。(參考其他人)

void main() {
    char origin_str[] = "How are you";
    int n_segs = Words_counts(origin_str);
    char **split_array = malloc(n_segs * sizeof(char*));
    split_array = split_str_to_array(origin_str);
    ..... //do something
    free(split_array);
}

和split_str_to_array函數:

char **split_str_to_array(const char strr[]) {
    char **res = NULL;
    char * p = strtok(strr, " ");
    int n_spaces = 0;

    while (p) {
        res = realloc(res, sizeof(char*) * ++n_spaces);
        if (res == NULL)
            exit(-1); 

        res[n_spaces - 1] = p;
        p = strtok(NULL, " ");
    }
    res = realloc(res, sizeof(char*) * (n_spaces + 1));
    res[n_spaces] = 0;
    return res;
}

它運作良好,但是我對從split_str_to_array函數獲取char數組的用法感到困惑。

我應該在split函數中使用free(res)嗎?如果是,如何返回char數組? 聲明一個新的已知長度的返回?

我擔心內存會在split函數中使用問題。 還是更好的方法來做到這一點?

非常感謝您的幫助。

free()的用法是正確的。

通過將由分配函數返回的內容傳遞給free()free()不再需要的內容。

但是main()的分配是沒有用的

char **split_array = malloc(n_segs * sizeof(char*));

如下一行

split_array = split_str_to_array(origin_str);

您將覆蓋已分配給split_array

這樣做會丟失malloc()返回的內容,因此您將無法再釋放它,從而導致內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM