C语言数组内存分配问题

zhuyuejiu 2009-11-19 02:44:36
设char s[10]= "abcde",t[ ]= "12345"; ,则s和t在内存中分配的字节数分别是(  )
A.6和5 B.6和6
C.10和5 D.10和6

#include <stdio.h>

void main()
{

char s[10]= "abcde",t[]="12345";
printf("%d\n",sizeof(s));
printf("%d\n",sizeof(t));
}


结果是D,谁来解决一下。。。。


...全文
308 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lklwlklw 2009-11-19
  • 打赏
  • 举报
回复
认真去看看sizeof()和strlen区别,经常会有这样的题目
djjlove_2008 2009-11-19
  • 打赏
  • 举报
回复
呵呵,,,最后一个结束符'\0';前面一个固定了长度,后面一个有实际分配的字符串决定。。
liangyonglou 2009-11-19
  • 打赏
  • 举报
回复
记住 字符串是以'\0'为结束符
zhuyuejiu 2009-11-19
  • 打赏
  • 举报
回复
受教了。呵呵。。。记住 了'\0'是所有字符串的结束符,对吧。。。
田暗星 2009-11-19
  • 打赏
  • 举报
回复
最详细解答:
字符串分配的 内存长度依据 字符串变量 定义时的长度

定义 数组为 [10]
1.数组实际内容长度(包括'\0') <=10 则成功分配10
2.数组实际内容长度(包括'\0') >10 则成功失败 为0

定义时 没有指定长度
编译器从 数组实际内容 判断

nkboy 2009-11-19
  • 打赏
  • 举报
回复
sizeof()求数组的长度,第一个数组指定了数组的长度为10,没有指定数组长度,会默认的将初始值的长度当做该数组的长度,“12345”加一个“\0”长度为6,strlen()求的是数组的实际长度(不含\0),所以用strlen求的长度 两个都是5
zdeepblue 2009-11-19
  • 打赏
  • 举报
回复
是D
char s[10]= "abcde"说明s有10个字节
t[ ]= "12345" 是5个字符加一个‘\0’共6个
田暗星 2009-11-19
  • 打赏
  • 举报
回复
char s[10]= "abcde",t[ ]= "12345"
[10] 编译器按照你的制定 分配长度为 10
t[] 编译器不知道长度 但根据"12345" 知道内容长度 为5+1=6
5+1 是因为 字符串以字符'\0' 作为结束标志
但你不用管 是编译器自动添加的
苍蝇①号 2009-11-19
  • 打赏
  • 举报
回复
t[ ]= "12345";
就是一个字符串,字符后面跟一个'\0'
_JeffreyWu 2009-11-19
  • 打赏
  • 举报
回复
char s[10]= "abcde"前五个是abcde,后五个是随机的。
t[ ]= "12345"; 按照你初始化的值来分配内存

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧