对于很多初学者,字符数组,字符串等概念很模糊,刚编了个小程序,希望能给初学者某些启示,这些程序最好自己跑跑,仔细体会其中差异。
首先由几点关于strlen的说明:
1)strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找
下去,直到遇到'\0'停止。
2)strlen的参数只能是char* 且必须是以'\0'结尾的.不是char*类型的会报错,不是以'\0'结尾的数据随机。
3)结束符'\0'在asic码表中对应NUL,十进制对应0.
/************************************************************************
****
* 工程描述:研究字符串,字符数组
* 创建人:2012.6.27,by e3doc
* 版本号:1.0.0
* 修改记录
****
************************************************************************/
#include "stdio.h"
#include "string.h"
#define BUF Str8
void main()
{
int Sizeof;
int Strlen;
char Str1[]="abc"; //'a','b','c','\0' sizeof=4,strlen=3
char Str2[3]="abc"; //'a','b','c' sizeof=3,strlen=7(X)
char Str3[4]="abc"; //'a','b','c','\0' sizeof=4,strlen=3
char Str4[10]="abc"; //'a','b','c','\0'...'\0' sizeof=10,strlen=3
char Str5[]={'a','b','c'}; //'a','b','c' sizeof=3,strlen=7(X)
char Str6[3]={'a','b','c'}; //'a','b','c' sizeof=7,strlen=11(X)
char Str7[]={'a','b','c','\0'}; //'a','b','c','\0' sizeof=4,strlen=3
char Str8[4]={'a','b','c','\0'}; //'a','b','c','\0' sizeof=4,strlen=3
char Str9[10]={'a','b','c'}; //'a','b','c','\0'...'\0' sizeof=10,strlen=3
char *Str10="efghj"; //auto sizeof=4,strlen=5
Sizeof=sizeof(BUF);
Strlen=strlen(BUF);
while(1);
}请仔细体会以下几点:
1)str1,str4,str7,str8完全等价,注意其变化过程。
2)注意str4和str9。

2718

被折叠的 条评论
为什么被折叠?



