c - char指针的伪变量数组(字符串数组)在输入后崩溃?

标签 c arrays sorting pointers c-strings

我想存储一个字符串数组,计算它们的长度,并使用下面提到的算法按长度递增顺序(最小->较大)重新排列它们//
交换持有一个较大的字符串来替换订单(当找到另一个分钟时)
我可以使用realloc(),但我尚未考虑防御编程

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

main()
{
    int i,j,N;
    printf("\n Input amount of alphanumericals: ");
    scanf("%d",&N);
        {
            int min;
            char *swap=(char*)malloc(sizeof(char)*150);
            char *A[N],**temp;
            temp=A;
            for(i=1;i<=N;i++){
                printf("\nInput %d element:",i); 
                gets(temp+i);
            }
            free(temp);

    printf("\n\nData [");
    for(i=0;i<N;i++)
        printf(" %s",A[i]);
    printf(" ]\n\n");

    //Ins sort
    for(i=0;i<N;i++){
        min=i;//Assume current is min
        for(j=i+1;j<N;j++){
            //Compare assuming min with current
            if(strcmp(A[j],A[min])<0){
                min=j;
            }
            //If next is min replace in current position
        if(min!=i){
            swap=A[i];
            A[i]=A[min];
            A[min]=swap;
        }   
    }
    free(swap);
    printf("\nAfter insertion point algorithm\n");
    printf("\n\nInsertion Sorted Data [");
    for(i=0;i<N;i++)
        printf(" %s",A[i]);
    printf(" ]");
    }
    return 0;
}

最佳答案

您尚未为A及其元素分配内存。
首先为A分配内存,然后为A的元素分配内存。然后分配temp = A[i]

应该是这样的:

A = malloc(N);
for(int i = 0; i < N; i++)
    A[i] = malloc(150);

关于c - char指针的伪变量数组(字符串数组)在输入后崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21166308/

相关文章:

c - 使用三个顶点在 c 中围绕自身旋转一个三角形

JAVASCRIPT 如何在选择选项中获得多个值

Java JTable - 首先单击列以降序排序

c - 一个好的 C 等效的 STL vector ?

c - OS X 10.10 上 ucontext makecontext 的段错误

mysql - 如何向mysql表中插入数据?

c - 生成 1 和 0 并以菱形形式存储在数组内

c++ - 为什么 C 和 C++ 支持在结构中按成员分配数组,但通常不支持?

arrays - Commodore 4.0 basic 中对字符串数组进行冒泡排序?

loops - 如何在 COBOL 中对表进行排序?