20_02_15笔记——《你必须知道的495个C语言问题》

《你必须知道的495个C语言问题》笔记
第7章 内存分配

7.1 为什么以下代码不行?
char *answer;
printf(“Type somrthing:\n”);
gets(answer);
printf(“You typed “%s”\n”, answer);
a:指着answer未初始化,他可能指向任何位置或者为空指针。

7.2 以下代码:
char *s1 = “hello,”;
char *s2 = “world!”;
char *s3 = strcat(s1, s2);
a:没有为结果分配空间,解决办法:把s1声明为足够大小的数组。

7.5 一个指针变量分配多少内存?
a:实际上,这样声明时char *p;只分配的足够容纳指针本身的内存,即分配了sizeof(char *)个字节的内存,还未分配任何让指针指向的内存。

7.6 如下代码将文件的所有行读入一个数组:
char linebuf[80];
char *lines[100];
int i;
for(i = 0; i<100;i++){
char *p = fget(linebuf, 80, fp);
if(p == NULL) break;
lines[i] = p;
}
a:实际上只分配了一行的内存:linebuf。每次调用fgets的时候,前一行的内容都被覆盖了。解决办法:为每一行都分配内存。

7.7 如下代码:
#include<stdio.h>
char itoa(int n){
char retbuf[20];
sprintf(retbuf, “%d”, n);
return retbuf;
}
在函数返回的时候,它的自动局部变量都会被抛弃。所以此处返回的指针是无效的,因为它指向一个已经不存在的数组。解决办法:1.给retbuf加static修饰;2.将retbuf作为函数形参;3.使用指针,使用malloc给
retbuf分配空间。

7.8 返回的指针必须是静态分配的缓冲区或调用者传入的缓冲区或malloc()获得的内存,但不能是局部数组。

7.14 如下分配有什么问题:
char *p;
*p = malloc(10);
a:给指针p分配空间应该用:p=malloc(10)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值