字符串
字符与字符串的区别在于字符串的末尾是’\0’ |
Printf()函数默认以C风格输出 |
string 是只读属性 |
拷贝复制模型
Void(char*from, char *to)//++的优先级比×高 { While((*from++ = *to++) &&!= ‘\0’ ) {
} } |
语法越界【错误模型】
Charbuf [ 3 ] = “abc”; |
不断修改指针变量的值【错误模型】
Char*getKeyByValude(char **keyvaluebuf,char *keybuf) { Inti = 0; Char*a= (char*)malloc(50); Printf(“%x”,a); //打印a的地址 For( ; **keyvaluebuf != ‘\0’ ) { *a++= *(*keyvaluebuf)++; //不断改变a所指向的内存首地址指向的内存的值,此时的a已经不是原先的那个a了,而是下移到后面去了 } Free(a); //真实释放的不是原先的那个a,而是后来下移的那个a,程序会当机。 } 解决方案 //可以定义一个辅助指针变量char*a1; a1 = a; |
Strstr(源字符串,”需要查找的字符串”) |
返回的是一个地址,需要查找的字符串第一次出现的地址,要使用指针接收该地址 |
Strchr(源字符串,‘需要查找的字符’)注意与strstr的相同指出与区别 |
从源字符串中寻找制定字符串的框架 |
Intcount = 0; Char*sub = “abcd”; Char*p = “abc111abc22222abcqqqq”; Char*p2 =NULL; //辅助指针 Do { P= strstr(p , sub) If(p !=NULL ) { Count++; P= p + strlen(sub); } Else { Break; } }while(*p != ‘\0’); Printf(“count: %d \n”,count);
|
函数库中字符串函数原型 |
Void*memcpy(void *, const void *,size_t); Int mencmp(const void *,const void *,size_t); Void*memset(void *,int ,size_t); Char*_strset(char *,int); Char*strcpy(char *p1,const char *p3); Char*strcat(char *,const char *); Intstrcmp(const char *,const char *); Size_tstrlen(const char *); |
两头堵模型 |
inttrimSpace(char *inbuf,char *outbuf) { char*p inti; intj; intcount; count= 0; i= 0; j= strlen(inbuf)-1; p= inbuf; while(isspace(p[i]) && p[i] != '0') { i++; } while(isspace(p[j]) && p[j] != '0') { j--; } printf("%c\n",p[i]); printf("%c\n",p[j]); memcpy(outbuf,p+i,j-i+1); outbuf[j-i+1]= '\0'; printf("%s\n",outbuf); return0; } |
字符串反置模型 |
voidstring_trun(char *abc, char *cba) { char*p; chartem; intlen; inti; i= 0; len= strlen(abc)-1; p = abc; while(len>i) { tem= p[i]; p[i]= p[len]; p[len]= tem; i++; len--; } printf("%s\n",p); memcpy(cba,p,strlen(p)); cba[strlen(p)-2]= '\0'; } |
特别说明: char*p定义的是一个指针 Chara[ ] = “sssssss”定义的是一个数组 P=a p指向数组a的 首地址 |