#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//关于字符串必须会的代码
int main()
{
//1、赋值,=改地址,strcpy改地址内的内容
char *s1 = "abc";
char s2[4] = "abc";
s1 = "123";//Y
// s2 = "123";//常指针不能用=赋值
// strcpy(s1,"123");//错误,修改只读区
//strcpy(s2,"123");//Y
char *s3 = malloc(4);
// s3 = "abc"; // s3指向了只读区,造成内存泄露
strcpy(s3,"abc");
printf("s3= %s\n",s3);
free(s3);
//2、比较字符串是否相等 ==比较地址,strcmp比较内容
char *s4 = "123";
char *s5 = "123";
char *s6 = malloc(4);
strcpy(s6,"123");
if(s4 == s5)
printf("相等\n");
else
printf("不等\n");
if(!strcmp(s4,s6))
printf("相等\n");
else
printf("不等\n");
//3、字符串的大小和长度:数据长度用strlen(),内存容量sizeof()
char buf[100] = {};
strcpy(buf,"abcd");
printf("length=%d\n",strlen(buf));//数据长度
printf("size=%d\n",sizeof(buf)); //内存容量
//4、字符串的拼接
char *name = "a.txt";
char *path = "/home/soft01";
char buf1[100] = {};
strcpy(buf1,path); //两种方法效果一样
strcat(buf1,"/");
strcat(buf1,name);
// sprintf(buf1,"%s/%s",path,name);
printf("buf1 = %s\n",buf1);
//用操作指针的方式编写字符串处理代码
//
char *message = "zhangfei,30";
char str[100] ={};
strcpy(str,message);
printf("%s\n",str);
char pname[20] = {};
char age[5] = {};
int flag = 1;
int pos = 0;
int i = 0;
/* for(i = 0;i < strlen(message);i++)
{
if(*(message+i) == ',')
{
pos = i;
flag = 0;
continue;
}
if(flag)
{
pname[i] = *(message+i);
}
else
{
age[i-pos-1] = *(message+i);
}
}*/
for(message;*message;message++)
{
if(*message == ',')
{
i = 0;
message++;
break;
}
else
{
pname[i] = *message;
i++;
}
}
for(message;*message;message++)
{
age[i] = *message;
i++;
}
printf("name=%s\n",pname);
printf("age=%s\n",age);
//6、字符串和其他类型的转换(int/double)
//sprintf() 和sscanf()
char *number = "1234.5678";
char buf2[20] = {};
double d = 0.0;
sscanf(number,"%lf",&d); //字符串转其他
printf("%lf\n",d);
sprintf(buf2,"%lf",d);//其他转字符串
printf("%s\n",buf2);
return 0;
}