c语言内存管理例题

//实现一个“可变二维数组”,这个二维数组的行数要求用户从键盘输入,每行的元素个数仍由用户从键盘输入。
//数组元素值用户可以自定义。最后把二维数组打印出来。不要忘记释放数组内存。

/*void main()
 {
 int rows;
 int **row;
 int *q,*p;
 int i,j;
 printf("请输入行数:\n");
 fflush(stdout);
 scanf("%d",&rows);
 row=(int **)malloc(sizeof(int)*rows);
 if( NULL == row)
 {
 printf("Insufficient memory available!\n" );
 return;
 }
 p=(int *)malloc(sizeof(int)*rows);
 if( NULL == p)
 {
 printf("Insufficient memory available!\n" );
 free(row);
 row=NULL;
 return;
 }
 for(i=0;i  {
 printf("请输入第%d行的元素个数:\n",i+1);
 fflush(stdout);
 scanf("%d",&p[i]);
 row[i]=(int *)malloc(sizeof(int)*p[i]);
 if( NULL ==row[i])
 {
 printf("Insufficient memory available!\n" );
 free(p);
 p=NULL;
 return;
 }
 q=row[i];
 for(j=0;j  q[j]=1;
 }
 for(i=0;i  {
 q=row[i];
 for(j=0;j  {
 printf("%d",q[j]);
 }
 printf("\n");
 }
 free(p);
 p=NULL;
 for(i=0;i  {
 free(row[i]);
 row[i]=NULL;
 }
 free(row);
 row=NULL;
 }*/

//编写一个函数,此函数使用动态存储分配来产生一个字符串的副本。例如函数为strclone,
//则调用p=strclone(str),将会为一个新的字符串分配和str占内存大小相同的一个字符串,并将字符串str的内容复制给该新字符串,
//然后返回指向新字符串的指针,如果分配失败则返回一个空指针。
/*char* _strdup(const char *str)
{
 unsigned int length=strlen(str)+1;
 char* strNew=(char*)malloc(length);
 if (strNew == NULL)
 {
  return NULL;
 }
 if(*str!='\0')
 {
  char* tmp=strNew;
  while(*str!='\0')
  {
   *strNew=*str;
   strNew++;
   str++;
  }
  *strNew='\0';
  return tmp;
 }
 else
 {
  return NULL;
 }
}

int main()
{
 char *str;
 char *string = "hello world!";
 str =_strdup(string);
    printf("新字符串为:%s\n",str);
 free(str);
 str=NULL;
 return 0;
}*/

//依次按照下面要求完成操作:
/*(1) 定义一个char指针name,用于保存姓名信息(字符串),初始化为NULL。
(2) 使用malloc为name分配长度为30的动态字符数组,用于保存字符串。
(3) 使用memset将name字符数组清零,分析执行结果。
(4) 使用strcpy为name赋值字符串"Ramos"。
(5) 输出name中字符串的值。
(6) 定义另一个字符指针Firstname,在定义时直接使用"="赋值字符串"Sergio"。
(7) 将Firstname中的字符串,赋值给name。并显示赋值后name中的字符串。
(8) 定义字符数组club,并初始化"RM"。
(9) 将club中的字符串,赋值给name。并显示赋值后name中的字符串。
(10) 释放为name所分配的动态数组。*/
/*int main() {
 char *name = (char*) malloc(sizeof(char) * 30);
 memset(name, 0, 30);
 strcpy(name, "Ramos");
 printf("%s\n", name);
 char *Firstname = "Sergio";
 name = Firstname;
 printf("%s\n", Firstname);
 char club[] = "RM";
 name = club;
 printf("%s\n", club);
 free(name);
 return 0;
 }*/

//建立一个学生结构数组来记录学生信息(学号ID,姓名和C语言成绩),要求动态建立一个结构数组,数组长度从键盘输入,
//自行给数组元素赋值并打印学生信息,最后不要忘记释放内存。


#define N 1

struct student
{ char num[6];
  char name[8];
  int score[4];
}stu[N];

int main()
{void print(struct student stu[6]);
int i,j;
for (i=0;i {printf("input score of student %d:",i+1);
printf("\n");
  printf("NO.: ");
  fflush(stdout);
  scanf("%s",stu[i].num);
  printf("name: ");
  fflush(stdout);
  scanf("%s",stu[i].name);
  for (j=0;j<3;j++)
    {printf("score %d:",j+1);
    fflush(stdout);
     scanf("%d",&stu[i].score[j]);
    }
}
print(stu);
return 0;
}

void print(struct student stu[6])
 {int i,j;
  printf("学号ID,姓名和C语言成绩:");
  printf("\n");
  for (i=0;i    {printf("%s,%s",stu[i].num,stu[i].name);
    for (j=0;j<3;j++)
      printf("%d,",stu[i].score[j]);
   }
 }

你可能感兴趣的:(c语言)