malloc动态分配字符串数组“ 一个月内的提醒”

Posted Criya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了malloc动态分配字符串数组“ 一个月内的提醒”相关的知识,希望对你有一定的参考价值。

 1 //输出一个月提醒
 2 
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6 
 7 #define MAX_REMIND 50            //提醒的数量
 8 #define MSG_LEN 60              //提醒的长度
 9 int main(void){
10     int read_line(char str[], int n);
11     char *reminders[MAX_REMIND];
12     char day_str[3], msg_str[MSG_LEN+1];
13     int day, i ,j, num_remind = 0;
14     
15     for(;;){
16         if(num_remind == MAX_REMIND){
17             printf("--No space left--\n");
18             break;
19         }
20         
21         printf("Enter day and reminder:");
22         scanf("%2d",&day);
23         if (day == 0) break;
24         sprintf(day_str, "%2d",day);
25         read_line(msg_str,MSG_LEN);         //读取字符串
26         
27         for(i=0;i<num_remind;i++)           //将日期靠前的提醒放在前面
28             if(strcmp(day_str,reminders[i]) < 0)    break;
29         for(j=num_remind;j>i;j--)
30             reminders[j]=reminders[j-1];
31         
32         reminders[i] = malloc(2 + strlen(msg_str) + 1 );
33         if(reminders[i] == NULL)    printf("--No space left--\n");
34         
35         strcpy(reminders[i],day_str);
36         strcat(reminders[i],msg_str);
37         
38         num_remind++;
39         
40     }
41     printf("\n Day Remind\n");
42     for(i=0;i<num_remind;i++)
43         printf("%s\n",reminders[i]);
44     
45     return 0;
46 }
47 
48 int read_line(char str[], int n){
49     int ch, i=0;
50     while ( (ch=getchar()) !=\n)
51         if(i<n)
52             str[i++]=ch;
53     str[i]=\n;
54     return i;
55 }

 

以上是关于malloc动态分配字符串数组“ 一个月内的提醒”的主要内容,如果未能解决你的问题,请参考以下文章

将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告

怎么动态分配指针数组

C语言如何定义一个动态数组?

C 中大型动态数组分配 (malloc) 期间的内存错误。它适用于较小的数组

数据结构与算法基础之malloc()动态分配内存概述

“字符串”数组的动态分配[重复]