使用临时数组的动态内存分配

时间:2013-07-03 23:14:51

标签: c arrays memory dynamic allocation

我无法为数组动态分配内存。 该程序简单地应该交换第一行与第二行的交换,第三行与第四行交换。我得到了奇怪的结果,如:

输入字符串:hello

输入字符串:你好吗

输入字符串:我很感谢

输入字符串:bye

输入字符串:bai

输入字符串:xx

=========================

你好吗

!我很感谢

您好

!你好吗

再见

!白

我很感谢

!再见

!XX

    int count = 0;
    char *lines[MAX_LINES];
    char *tmp[50]; 


    printf("Enter string: ");
    fgets(tmp, 50, stdin);
    lines[count] = (char *) malloc((strlen(tmp)+1) * sizeof(char));
    strcpy(lines[count], tmp); 

    while(strcmp("xx\n", lines[count])){
            count++;
            printf("Enter string: ");
            fgets(tmp, 50, stdin); 
            lines[count] = (char *) malloc((strlen(tmp)+1)* sizeof(char));

            strcpy(lines[count], tmp); 
    }

void exchange(char * records[])
{
    char * temp;
    temp = records[0];
    records[0] = records[1];
    records[1] = temp;

    temp = records[2];
    records[2] = records[3];
    records[3] = temp; 

}

void printArray(char * inputs[], int row, int col)
{
    int i, j;

    for(i = 0; i < row; i++){
        for(j = 0; j < col; j++){
            printf("%c", inputs[i][j]);
        }

    }
}   

1 个答案:

答案 0 :(得分:0)

这不好:

char *tmp[50]; 

你打算这样做:

char tmp[50]; 

奇怪的是,它会有点工作,但是你的编译器应该在各处发出警告。

我认为你的主要问题是你的printArray函数,它不检查字符串中的NULL终止符。所以它会在大部分结束时运行。

不要逐个字符地打印,请执行以下操作:

void printArray(char * inputs[], int length)
{
    int i;
    for(i = 0; i < length; i++){
        printf("%s", inputs[i]);
    }
}  

以下是使用malloc的提示。不要转换结果,如果您为char值保留空间,请不要使用sizeof(char) - 它始终为1.

lines[count] = malloc( strlen(tmp) + 1 );