找回密码
 注册
查看: 571|回复: 8

请问与动态内存分配有关的一个问题

[复制链接]
发表于 2004-11-8 18:21:37 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(void)
{
  unsigned char *get_block,*pointer;
  pointer ="TEST";
  get_block =(unsigned char*)malloc(sizeof(char) *strlen(pointer) +1);
  strcpy(get_block,pointer);
  *get_block ='t';
  puts (get_block);
  free (get_block);
}

这个代码是没有问的
get_block =(unsigned char*)malloc(sizeof(char) *strlen(pointer) +1);
我知unsigned char*是内存的类型,
+1是当失败时返回null
strlen是什么意思啊?
sizeof(char) *strlen(pointer)以是什么意思?
为什么要用*?
       
还有一个问题是:我在*get_block ='t';后加入这样一行get_block[2]='e';
也没有问题.为什么get_block[2]='e'能通过的?
发表于 2004-11-8 18:45:12 | 显示全部楼层
man strlen
sizeof 都不知道? 自己找书看。

+1是当失败时返回null????
那是c语言在存储字符串时需要在末尾加一个0。

c语言里指针和数组可以混着用(本质上是一个东西)。
回复

使用道具 举报

发表于 2004-11-8 20:14:05 | 显示全部楼层
楼上的mm是谁?
回复

使用道具 举报

发表于 2004-11-9 13:35:45 | 显示全部楼层
*就是"乘以"
+1是防止malloc(0)
回复

使用道具 举报

 楼主| 发表于 2004-11-9 13:43:58 | 显示全部楼层
我知了!为什么要要*了!不同类型要不同的字节,sizeof(char)
strlen(pointer)是计算pointer字符串的字符长度
这样sizeof(char) *strlen(pointer)就是要用的内存空间了!!
对吗?
回复

使用道具 举报

发表于 2004-11-9 13:47:53 | 显示全部楼层
另外+1也是因为字符串控件除了字符串长度外还要占一个字节来表示结束.
回复

使用道具 举报

发表于 2004-11-9 14:40:41 | 显示全部楼层
typedef struct {
    int i;
    unsigned char *p;
} NODE;

NODE *node;

node = malloc (sizeof(NODE));

像这样的具有“unsigned char *”数据类型的malloc分配多少内存呢?
回复

使用道具 举报

发表于 2004-11-9 16:10:06 | 显示全部楼层
sizeof(unsigned char *),32位平台一般是4个字节.
回复

使用道具 举报

发表于 2004-11-16 10:43:13 | 显示全部楼层
建议多看看\0,\n,\t等等,对了解一个数据存储的时候,到底占了多少很有帮助!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-11 16:29 , Processed in 0.028628 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表