字符串数组内存占用问题

juyyao 2008-07-02 02:11:08
现在定义一个char c[10]="ssss",实际占用多少内存???是不是5?也就是说到'\0'为止,而后面的那些都不算,还是说那些预留的'\0'也有占用?在此先谢过
...全文
276 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Secrete_Hunter 2008-07-03
  • 打赏
  • 举报
回复
又复习了以便~~
tangtang02520 2008-07-03
  • 打赏
  • 举报
回复
char d[] = {'a','a','a','a','\0'}; 这样不错!好方法!
或char d[] = "aaaa";
受教了!
hai040 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bysdy 的回复:]
引用 12 楼 tangtang02520 的回复:
感谢bysdy!
如此说来 "char d[] = {'a','a','a','a'}" 并不是一种好的初始化方法。
谭浩强的书,还说这样方便,晕哦!
再次感谢!

char d[] = {'a','a','a','a','\0'}这样~~~
[/Quote]
或char d[] = "aaaa";
int g[] = {1, 2, 3}是比int g[3] = {1, 2, 3}方便
lele_nancy 2008-07-03
  • 打赏
  • 举报
回复
char c[10],说明开辟了10个字节的内存
kelvin_2013 2008-07-03
  • 打赏
  • 举报
回复
up
canlin 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 henry3695 的回复:]
C/C++ code
#include "stdio.h"
#include "string.h"
void main()
{
char c[10]="ssss";
printf("sizeof(c)=%d,strlen(c)=%d",sizeof(c),strlen(c) );
}
//上机去测试一下,感受一下,char c[10],说明开辟了10个字节的内存
[/Quote]
bysdy 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 aozhi 的回复:]
别人给了你10个银行卡。有5个里面有钱。
你说有几个可以取出钱来?有几个可以使用呢?
[/Quote]
强~~~~
^_^
aozhi 2008-07-03
  • 打赏
  • 举报
回复
别人给了你10个银行卡。有5个里面有钱。
你说有几个可以取出钱来?有几个可以使用呢?
bysdy 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tangtang02520 的回复:]
感谢bysdy!
如此说来 "char d[] = {'a','a','a','a'}" 并不是一种好的初始化方法。
谭浩强的书,还说这样方便,晕哦!
再次感谢!
[/Quote]
char d[] = {'a','a','a','a','\0'}这样~~~
tangtang02520 2008-07-03
  • 打赏
  • 举报
回复
感谢bysdy!
如此说来 "char d[] = {'a','a','a','a'}" 并不是一种好的初始化方法。
谭浩强的书,还说这样方便,晕哦!
再次感谢!
bysdy 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tangtang02520 的回复:]
借楼主地方发个问题,希望见谅,因为自己不会提问。
刚才试了一下,源代码如下
#include <stdio.h>
#include <string.h>
int main(void)
{
char c[10] = "ssss";
char d[] = {'a','a','a','a'};
printf("sizeof(c) is %d,\tstrlen(c) is %d\n",sizeof(c),strlen(c));
printf("sizeof(d[]) is %d,\tstrlen(d[]) is %d\n",sizeof(d),strlen(d));
return(0);
}

[/Quote]
strlen()统计字符串到'\0'之前的长度,
char d[]={'a','a','a','a'};
d里面没有'\0',所以strlen(d)输出是不确定的,取决于后面第一个'\0'的出现位置
K行天下 2008-07-03
  • 打赏
  • 举报
回复
char c[10]="ssss",实际占用多少内存???

你可以打印
sizeof(c)
strlen(c)
对比一下
tangtang02520 2008-07-03
  • 打赏
  • 举报
回复
借楼主地方发个问题,希望见谅,因为自己不会提问。
刚才试了一下,源代码如下

#include<stdio.h>
#include<string.h>
int main(void)
{
char c[10] = "ssss";
char d[] = {'a','a','a','a'};
printf("sizeof(c) is %d,\tstrlen(c) is %d\n",sizeof(c),strlen(c));
printf("sizeof(d[]) is %d,\tstrlen(d[]) is %d\n",sizeof(d),strlen(d));
return(0);
}
[/code]

问题来了,为什么输出是
sizeof(c) is 10, strlen(c) is 4 //这个好理解
sizeof(d[]) is 4, strlen(d[]) is 8 //这个是为什么?初始化方法不同引起的吗?哪个高手能讲解一下,多谢了!
九十度黑 2008-07-03
  • 打赏
  • 举报
回复
数组前四个字符是's',后六个'\0'。
数组每个元素都可以使用:
#include <stdio.h>
#include <string.h>

int main()
{
int i = 0;
char c[10]="ssss";

printf("sizeof(c)=%d,strlen(c)=%d\n",sizeof(c),strlen(c));
printf("%s\n", c);


c[4] = 'e';
printf("sizeof(c)=%d,strlen(c)=%d\n",sizeof(c),strlen(c));
printf("%s\n", c);

c[7] = 'e';
printf("sizeof(c)=%d,strlen(c)=%d\n",sizeof(c),strlen(c));
printf("%s\n", c);

printf("使用for循环输出:\n");
for (; i < 10; i++)
putchar(c[i]);
putchar('\n');
return 0;
}
我看你有戏 2008-07-02
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "string.h"
void main()
{
char c[10]="ssss";
printf("sizeof(c)=%d,strlen(c)=%d",sizeof(c),strlen(c) );
}
//上机去测试一下,感受一下,char c[10],说明开辟了10个字节的内存
juyyao 2008-07-02
  • 打赏
  • 举报
回复
谢谢大家的回复!!!!
juyyao 2008-07-02
  • 打赏
  • 举报
回复
也就是说char[10]在定义编译之后系统就会给它分配10字节的内存,而不管这个数组到底存了多少个有效字符?你能不能明确点,我看书里有句话说占用6个字节,但在内存分配表里它又多了好几个\0出来,我有点混啊
na_he 2008-07-02
  • 打赏
  • 举报
回复
同意上面说得,预留但不可用。
yyyapple 2008-07-02
  • 打赏
  • 举报
回复
你申请了多少就是多少,在这里为10字节
CXBID 2008-07-02
  • 打赏
  • 举报
回复
答案是后面个
加载更多回复(1)

69,371

社区成员

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

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