-5

我尝试输入“aaaaaaa”和“bbbb”。我的打印功能输出类似于“aaabb”。好像我在这里的记忆管理不好,但我找不到那个地方。请帮忙。

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

void function(char *array[], int size);
void function2(char *array[], int size);

int main()
{
    int size = 0;  
    char *array[] = {0};  
    function(array, 0);  
    size++;  
    function(array, 1);  
    size++;  
    function2(array,2);  
    return 0; 
}

void function(char *array[], int size)
{
    char word[20] = "0";
    scanf("%s", word);
    int len = strlen(word) + 1;
    array[size] = (char *)malloc(sizeof(len));
    strlcpy(array[size], word, sizeof(len));
}

void function2(char *array[], int size)
{
    for(int x = 0; x < size; x ++)
    {
        printf("%s", *array);
        (array)++;
    }
}

~

4

1 回答 1

2

您的原始数组的大小为 1

char *array[] = {0};等于char *array[1] = {0};

然后稍后您尝试写入array[size]大小大于 0 的未保留空间。

将数组声明为:

char *array[ 3 ] ;

调用sizeofvariablelen会给你变量本身的大小,而不是它所持有的值。

于 2013-07-12T12:53:17.677 回答