可以通过字符数组或字符指针来定义字符串,也可以用宏定义对常量字符串进行定义。 一维的情况如下:
char string0[10]; //定义个长度为10的字符串,但未赋值 char string1[]="prison break"; //定义了一个字符数组string1,并进行初始化,使得其长度自动为13(字符 串”prison break"中的字符个数加上结尾的'') char string2[100]="michael scofield"; //定义了一个有100个元素的字符数组string2,并初始化了17个元素("michael scofield";加上结尾的'');
二维的情况下:
char string3[6][30]; char string3[6][30]={"joy","phosee","monses","chandele","ross","rather"}; //此句表示有6个字符串,每个字符串的长度最多为30,每个字符串的初始值 与"joy","phosee","monses","chandele","ross","rather"相对应;
字符指针定义字符串:
char *str2 = "HelloWorld"; char *str2;
在储存空间中,通过定义指针来定义字符串时,系统会把指针分配到静态储存空间中,给指针赋值并不能结束这种状态,此时使用指针可能出错,但是指针指向某一个变量可以结束这种状态也可以通过a = (char *)malloc(100)来暂时分配指针动态空间。
char b[10]="ddd"; char *a; a="aaa" // //strcpy(a,"ff"); 不会报错,但是运行不了 printf("a=%sn",a); printf("b=%sn",b); return 0;
宏定义对常量字符串进行定义:
#define str3 "HelloWorld"; // 通过宏定义来定义字符串"HelloWorld",等价于str3="HelloWorld"
字符串的输入
用scanf来输入:
char a1[10]; scanf( "%s",a1); //字符串是可以以scanf来以%s的形式来输入的
缺点:
由于scanf是遇到空格键和回车键来结束输入的,所以当我们遇到形如prison break来输入时,打出空格就结束了,所以无法经行输入。
由于scanf会遇到空格键来结束字符串,有时候会输入紊乱,所以我们有时会用gets()来吸收回车键n
解决办法:
scanf("%[^n]",string);根据scanf的用法我们可以这样来写,这样可以直接拍拖这样==空格问题==的麻烦
直接用其他方式。
#includeint main() { char *buf; //char buf[100]; gets(buf); puts(buf); }
字符串处理
字符串通常来说就是单个字符连起来的数组,处理的时候也是可以按照数组的形势来处理的
如:
char str[] = "hello world";//定义一个字符数组 int len = strlen(str),i;//获取字符数组的长度 for (i = 0; i < len; i++) { printf("%c", str[i]); }
这里主要说通过指针定义的字符串:
一串代码直接解决问题:
#include#include int main() { int i; char *p = "hello world"; len = strlen(p); for (i = 0; i < len; i++) { printf("%c", *(p++)); //使用指针的方式遍历字符数组, } for (i = 0; i < len; i++) { printf("%c", *(p+i)); //推荐这种方式 } return 0; }
这里即显示了指针形式的字符串做便利处理时的方法,有表明了怎么便利处理字符串里一个字符。
当然输出字符串时还是要printf("%s", p);。
字符串做函数参数#include#include #include void fun(char *p) { //p = (char *)malloc(100); strcpy(p,"hello world"); printf("p=%sn",p); } int main() { char *str=NULL; char b[10]="sdas"; str=b; fun(str); printf("b=%sn",str); return 0; }
这里即说明了子函数接受参数时的void fun(char *p)又说明了主函数传递参数时的fun(str)。
但是应该注意一下几个问题:
当参数即fun()的括号内是数组时,即可随便使用,但是当括号里面是指针名字的时候,在这之前必须要把指针指向某一个数值才能使用。
说明一下p = (char *)malloc(100);是给指针暂时分配动态空间,当指针没有指向其他时,则给指针暂时分配空间,当已经指向其他时,则可以接触指向。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)