首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮忙看C程序的有关问题

2012-03-03 
帮忙看C程序的问题#includestdio.h#includestdlib.h#includestring.hvoidmain(){1。char*sdpnewchar

帮忙看C程序的问题
#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>

void   main()
{
1。char   *sdp   =   new   char[300]   ;

if   (sdp   ==NULL)
{
return;
}
2。printf( "sdplen=%d\n ",strlen(sdp));

sprintf(sdp, "%s ", "peng\r\n ");

char   *sdp1   =sdp;
sdp1   +=strlen(sdp);
sprintf(sdp1, "%s ", "m=video   0   RTP/AVP   96\r\na=rtpmap:96   MP4V-ES/90000\r\na=fmtp:96   profile-level-id=3;config=00000100000001200086c400670c161048518f\r\na=control:trackID=1\r\n ");

printf( "sdplen=%d\n ",strlen(sdp));

char   *sdp2   =sdp;
sdp2   +=strlen(sdp);
sprintf(sdp2, "%s ", "m=audio   0   RTP/AVP   97\r\na=rtpmap:97   AMR/8000\r\na=fmtp:97   octet-align=1\r\na=control:trackID=2\r\n ");

printf( "sdplen=%d\n ",strlen(sdp));

printf( "sdp=%s\n ",sdp);

delete   sdp;

system( "pause ");

return;

}

问题:第1。行为char   *sdp   =   new   char[300]   ;但是   第2。行打印出的sdp   len   竟然是sdp     len=304

为什么不是300而是304呢?那么我在后面通过sprintf函数能向sdp中填充的字节数应该是不多于多少呢?

若改为char   *sdp   =   new   char[1000]   ;第2。行打印出的sdp   len   竟然是sdp     len=1016

这是怎么回事呢?为什么总比申请的空间要大,但又不是增加固定大小?



[解决办法]
strlen只是计算字符串长度的
不是计算分配的内存空间
他遇到 '\0 '结束
而你分配的空间未初始化
里面的内容是不确定
具体和编译器有关

你可以用sizeof来计算数组的大小
[解决办法]
strlen(sdp)计算的是字符串的长度,字符串的长度计算是以 '\0 '为结尾
因此strlen(sdp)不会在乎是否分配空间以及分配空间长度,只计算从开始地址到第一次遇到 '\0 '的长度
你可以赋值*(sdp+299)=0;则strlen(sdp) <=299;
[解决办法]
1。char *sdp = new char[300] ;

if (sdp ==NULL)
{
return;
}
2。printf( "sdplen=%d\n ",strlen(sdp));
我要说的是,你在1-2之间没有为字符串(C++ new 动态分配)设置字符串结束符。
new和C中的malloc、calloc、realloc只负责分配内存,但是不会为你负责初始化。
所以对于2执行时,sdp指向的字符串由于没有显示指定字符串结束符 '\0 '(C,C++对于C风格的字符串是根据字符串结束符 '\0 '判断一个字符串的结束的),这时,编译器会从开始位置直到找到一个 '\0 '为止,一般情况下内存中会有很多值为0(对应 '\0 '的ASCII值),所以一般会输出这个字符串,只不过可能超过该字符串被分配的内存空间。
对于你的结果如此,是因为内存中的 '\0 '分配是随机的,该程序每次运行该字符串获得内存空间位置又是随即的,所以结果自然很难预料。

[解决办法]
To:yecheng_110()
“你可以用sizeof来计算数组的大小”
我要说的是sizeof(array)得到的值是sizeof(type_of_array)
例如
char a[100];
sizeof(a)==sizeof(char)

[解决办法]
其它的个人支持
guochun(yingc)
正解。

热点排行