内存分配细节malloc

为什么要这样写

        char* str = (char*)malloc(sizeof(char)*15);
        scanf("%s", str);
        strings[i] = str;

而不这样写

        strings[i] = (char*)malloc(sizeof(char) * 15);
        scanf("%s", strings[i]);
        //strings[i] = str;

为什么要再定义一个中间量

因为char *str是一个指针,指针变量是可以接受malloc分配的内存。
这个程序里strings应该是一个二维数组,数组本身就有自己分配的内存,怎么能够把内存空间分配给已经有的内存空间呢?这是不被允许的。
string[i]=str;这句话是把指针变量所指定的这段数据,直接复制给了string[i]这段内存里。

你转换为指针类型来接收的,而且堆内存分配是接受首地址和地址长度来分配的,你拿一个数组接收存的只是一个栈内存,在函数结束也就没了

strings是一个二级指针

strings[i]是个指针数组的成员,这两种写法应该都是正确的。