C语言字符串的处理

    xiaoxiao2021-03-25  14

    字符串的处理: 1、C程序员定义字符串的方式有三种:

    1) 字符串字面值:”abc” 2) 字符数组:char buf[50]; 3) 字符指针:char *str;

    2、数组可以看成常指针(不可以改变地址,只能初始化)。某些时候和指针有区别(比如使用sizeof的时候)。 3、memset函数可以清理字符数组,包括变长数组。

    4、实例:

    /* 字符串的处理 */ #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { /* (1) 赋值 */ //字符串赋值,赋值改变的是地址,而strcpy改变的是值 char* s1 = "abc"; char s2[10] = "abc"; s1 = "abc"; //正确,地值可以修改 //strcpy(s1,"123"); //错误,修改只读区 //s2 = "123"; //错误,数组是一个常指针,不可以改变地址 strcpy(s2,"123"); //正确,值可以修改 char* s3 = (char *)malloc(10); strcpy(s3,"abc"); //s3 = "123"; //错误,改变了地址,使其指向只读区,free会失败 printf("%s\n",s3); free(s3); /* (2) 字符串的长度,字符串的长度strlen(),buf的大小sizeof */ char buf[50] = "abc"; printf("strlen(buf) = %d, sizeof(buf) = %d\n",strlen(buf),sizeof(buf)); /* (3) 字符串的比较,==比的是地址,strcmp比的是值 */ char* s4 = "abc"; char* s5 = "abc"; printf("%d\n",s4==s5); //比较的是一个地址,而不是字面值 printf("%d\n",strcmp(s4,s5)); //比较的是字面值,而不是地址 char s6[10] = "abc"; char s7[10] = "abc"; printf("%d\n",s6==s7); printf("%d\n",strcmp(s6,s7)); /* (4) 用指针操作字符串 */ char* s8 = "zhangfei,zhang123"; int len = strlen(s8); char name[len]; char passwd[len]; //清空姓名和密码的缓冲区 memset(name,0,len); memset(passwd,0,len); int i = 0, flag = 0, pos = 0; for(i = 0; i < len; i++) { if(*(s8 + i) == ',') { flag = 1; pos = i; continue; } if(!flag) { name[i] = *(s8 + i); } else { passwd[i-pos-1] = *(s8 + i); } } printf("name:%s, passwd:%s\n",name,passwd); /* (5)字符串的拼接 */ char fpath[50] = "/home/andy/C++/day026"; char fname[50] = "stf.txt"; char pname[100] = {}; /*方法一 strcpy(pname,fpath); strcat(pname,"/"); strcat(pname,fname); printf("pname:%s\n",pname); */ //方法二 sprintf(pname,"%s/%s",fpath,fname); printf("pname:%s\n",pname); /* (6) 字符串和其他类型的转换 */ //其他类型转换成字符串 int x = 100; char bufx[10] = {}; sprintf(bufx,"%d",x); printf("bufx = %s\n",bufx); //字符串转换成其他类型 int y = 0; sscanf(bufx,"%d",&y); printf("y = %d\n",y); /* 总结:处理字符串大部分使用字符串处理函数更好,只有少部分例外 */ return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-300260.html

    最新回复(0)