簡體   English   中英

打印字符串時出現分段錯誤

[英]Got segmentation fault on printing a String

在以下代碼中,當我嘗試打印字符串時,錯誤是“分段錯誤”。 調用sort_array(str, str_tmp, N)后, strNULL

這是為什么?

當然,這就是它失敗的原因:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void sort_array(char **str, char **str_tmp, size_t N)
{
    for (size_t i = 0; i < N; i++)
    {
        size_t j = i;

        str = realloc(str, (i+1) * sizeof(char *));

        for ( ; j != 0 && strcmp(str_tmp[i], str[j-1] ) < 0; j--)
        {
             str[j] = str[j-1];
        }

        str[j] = str_tmp[i];
    }
}

int main(void) 
{
    char *str_tmp[] = { "d", "a", "c", "b", "r", "o", "k", "f"};
    const size_t N = sizeof( str_tmp ) / sizeof( *str_tmp );
    char **str = NULL;

    sort_array(str, str_tmp, N);

    for (size_t n = 0; n < N; n++)
    {
        printf("%s ", str[n]);
    }

    putchar('\n');

    free(str);

    return 0;
}

您必須通過引用傳遞指針str 否則 function 處理指針的副本。 那就是原始指針保持不變。

給你。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void sort_array(char ***str, char **str_tmp, size_t n)
{
    for (size_t i = 0; i < n; i++)
    {
        size_t j = i;

        *str = realloc(*str, (i+1) * sizeof(char *));

        for ( ; j != 0 && strcmp(str_tmp[i],( *str )[j-1] ) < 0; j--)
        {
             ( *str )[j] = ( *str )[j-1];
        }

        ( *str )[j] = str_tmp[i];
    }
}

int main(void) 
{
    char *str_tmp[] = { "d", "a", "c", "b", "r", "o", "k", "f"};
    const size_t N = sizeof( str_tmp ) / sizeof( *str_tmp );
    char **str = NULL;

    sort_array(&str, str_tmp, N);

    for (size_t n = 0; n < N; n++)
    {
        printf("%s ", str[n]);
    }

    putchar('\n');

    free(str);

    return 0;
}

程序 output 是

a b c d f k o r 

暫無
暫無

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

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