C Primer Plus 第6版 12章 练习9

来源:互联网 发布:红米4a支持网络频段 编辑:程序博客网 时间:2024/05/18 12:42
/* --  第六章 09 编写一个符合以下函数的描述: 首先,询问用户需要输入多少个单词,然后接收用户输入的单词并显示出来,使用malloc 根据回答创建动态数组,该数组内含相应的指向char的指针(注意: 由于数组的每个元素都是指向char的指针,所以用于储存malloc()返回值的指针应该是一个指向指针的指针,且它所指向的指针指向char)。在读取字符串时,该程序应该把单词读入一个临时的char数组使用malloc()分配足够多的存储空间来储存单词,并把地址存入该指针数组(该数组中每个元素都是指向char的指针), 然后,从临时数组中把单词拷贝到动态分配的存储空间中,因此,有一个字符指针数组,每个指针都指向一个对象,该对象的大小正好能容纳被储存的特定单词。下面是运行示例:     How may words do you wish to enter ? 5    Enter 5 words now:    I enjoyed doing this exerise    Here are your words:    I    enjoyed    doing    this    exercise*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>//#define SIZE 40char **mal_ar(int n);int main(void){    int words, i, sum = 0;    char **st;    printf("How many words do you wish to enter? : ");    scanf("%d", &words);    getchar();      // 滤掉回车    printf("Enter %d words now:\n", words);    st = mal_ar(words);    printf("Here are your words: \n");    for(i = 0; i < words; i++)    {        puts(st[i]);        sum += strlen(st[i]) + 1;    }    printf("共占用%d字节空间\n", sum);    free(st);           // 释放指针数组;    return 0;}char **mal_ar(int n){    char **pt;    char *temp;    int len;    // 给n个指针分配动态内存空间, 返回指针的指针    pt = (char**)malloc(n * sizeof(char *));    // 临时数组分配动态内存空间, 返回指针    temp = (char *)malloc(40 * sizeof(char));    for(int i = 0; i < n; i++)    {        // 输入存入临时数组        scanf("%s", temp);        // 测量临时数组大小,分配正好存放的空间        len = strlen(temp);        // 给每个指针指向的地址分配内存空间        pt[i] = (char *)malloc((len + 1) * sizeof(char));        strcpy(pt[i], temp);    }    free(temp);    return pt;}
阅读全文
0 0
原创粉丝点击