首页 > 代码库 > 指针的编程艺术(二)
指针的编程艺术(二)
指针的编程艺术(二)之指针与字符串
指针变量大小为4个字节,看一个例子:
#include<stdio.h> int main() { double i = 10, j = 100; double * p = &i; double * q = &j; printf("%p\n",p); printf("%p\n",q); return 0; }
发现两个数据的地址距离是8,正好是double类型数据的大小,(地址的差距为指针变量所指向数据类型的大小)但是它不是指针类型变量的大小,其实看这个地址也可以发现它由8位十六进制数据组成,正好需要4个字节大小,没错 这就是指针变量的大小。
进入正题,指针与字符串:
char * p = "Apple iPod";p指向第一个字符‘A’的地址,也就是该字符串的首地址。
A
P
P
L
E
I
P
O
D
\0
注意:字符串的末尾都有一个空字符作为字符串的结束标志,如果缺少它,将会出现错误。
遍历该字符串中的字符:
#include<stdio.h> #include<conio.h> int main() { char * p = "Apple iPod"; printf("字符串为:"); for(int i=0; *p!='\0'; i++) { printf("%c",*p); p++; } printf("\n"); printf("%s",p);//直接将字符串输出 return 0; }
下面一个缺少结束符的例子:#include<stdio.h> #include<stdlib.h> int main() { char * str1 = "Apple iPod"; char str2[10] = "Apple iPod"; printf("%s",str1); printf("%s",str2); return 0; }有的编译器在编译的时候会识别出来str2这个错误 ,但是有的识别不出来,输出的结果是字符串后面多了好多字符,类似于“烫”。常用的字符串库函数
通常谈到字符串的操作,不外乎计算字符串长度(string length)、字符串拷贝(string copy)、字符串连接(string concatenate)、字符串比较(string compare)。
下面给出库函数的使用和自己编写代码模仿库函数。
计算字符串的长度:strlen(str)
#include<stdio.h> #include<stdlib.h> #include<string.h> int stringlength(char * p); int main() { /*使用库函数*/ char * str = "Apple iPod"; printf("长度为:%d\n",strlen(str)); /*自己编写*/ int length = 0; length = stringlength(str); printf("长度为:%d\n",length); return 0; } int stringlength(char * p) { int s = 0; while(*p!='\0')//直到找到结束符为止 { s++; p++; } return s; }
字符串的拷贝:strcpy(str1,str2);作用:把str2中的字符逐一复制到str1中。#include<stdio.h> #include<stdlib.h> #include<string.h> void stringcopy(char *p, char *q); int main() { char *str1 = "apple"; char str2[10] = ""; strcpy(str2,str1); printf("%s\n",str2); stringcopy(str2,str1); printf("%s\n",str2); return 0; } void stringcopy(char *p, char *q) { while((*p=*q)!='\0') { p++; q++; } }
如果将char str2[10] = "";改为 char *str2将会出现错误,引文str2没有指向任何内存空间,解决方法是给它分配内存。t = (char *)malloc(10 * sizeof(char));字符串连接:strcat(str1,str2),作用是将str2字符串连接到str1的尾端。
#include<stdio.h> #include<stdlib.h> #include<string.h> void stringcat(char *p, char *q); int main() { char * str1 = "apple"; char * str2 = "orange"; char str3[50] = "i want to bay a"; strcat(str3,str1); printf("%s\n",str3); stringcat(str3,str2); printf("%s\n",str3); return 0; } void stringcat(char *p, char *q) { while(*p!='\0') { p++; } while((*p=*q)!='\0') { p++; q++; } }千万不要这样:strcat(str1,str2);//原因还是没有分配内存空间字符串比较:strcmp(str1,str2),作用是将这两个字符串是否相等。
#include<stdio.h> #include<stdlib.h> #include<string.h> int stringcompare(char *p, char *q); int main() { char *str1 = "abczx"; char *str2 = "abczc"; int value = http://www.mamicode.com/strcmp(str1,str2);>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。