新手,因为完全做不来习题,干脆抄答案找茬。
											 程序代码:
程序代码://
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /*strlen()*/
int main(void)
{
    char **pStr = NULL;
    char *pBuffer = NULL;
    int count = 0;
    pStr = malloc(sizeof(char *));
    do
    {
        pBuffer = malloc(100 * sizeof(char));
        gets(pBuffer);
        count++;
        pStr = realloc(pStr,count * sizeof(char*));
        *(pStr + count - 1) = pBuffer;
    }while(strlen(pBuffer) !=0 );
    for(int i=0; i<count-2; i++) /*-2很难理解啊*/
    {
        for(int j=0; j<count-2-i; j++)/*不减无所谓吧*/
        {
            if(strlen(*(pStr+j)) > strlen(*(pStr+j+1)))
            {
                pBuffer = *(pStr+j);
                *(pStr+j) = *(pStr+j+1);
                *(pStr+j+1) = pBuffer;
            }
        }
    }
    for(int i=0; i<count-1; i++)
    {
        printf("%s\n",*(pStr+i));
    }
    free(pStr);
    return 0;
}
习题7.2 编写一个程序,从键盘读入任意个谚语,并将它们存储到执行期间分配的内存中。然后,将它们以字长顺序由短到长地输出。疑问:1,在for循环中,用于计数出现了两次 -2 ,其实不减也没问题吧?
2,free(Str) 是自行添加的,原文没有写,释放内存这样就可以了么?
3,原作者的书写方式,在写符号时,如 “1 + 1”,这样留出空格,是个人习惯,还是有合理的意义?
预谢
[此贴子已经被作者于2019-4-19 22:25编辑过]



 
											





 
	    

 
	
 
											

