#include
#include
#include
//输入字符串的方式:fget,定义一个字符串可以通过数组的方式
int main1() {
printf("输入一个字符串\n");
char str[11];
fgets(str,11,stdin);
printf("str= %s\n",str);
}
运行的结果为:
hello
输入一个字符串
str= hello
//字符串拷贝功能strcpy,与计算字符串长度的函数strlen
//strlen与sizeof的区别如下:
C语言中没有字符串,用的是字符数组来模拟字符串。
C风格的字符串时字符数组然后在末尾加0表示结尾。
在C语言中有strlen和sizeof两个函数求字符数组的长度函数,他们俩的区别就是是否把最后的结束标志也加上去。
strlen是不加的,他表示字符串的长度。
而sizeof求的是字符串在内存中的长度,所以它是加上最后的'\0'的
所以一般而言后者的长度会比前者多1。
代码如下:
int main() {
char buf[] = "abcd";
printf("sizeof(buf) = %d\n",sizeof(buf));
printf("strlen(buf) = %d\n",strlen(buf));
return 1;
}
运行结果如下:
sizeof(buf) = 5
strlen(buf) = 4
申请字符串数组如果没有申请字符串的大小的话,sizeof一般会比strlen多一个,但是如果为字符串数组申请了内存的大小,
strlen计算的是字符串到'\0'位置的大小
sizeof计算的字符串占的内存大小
代码如下:
int main()
{
char str[100] = {0};
strcpy(str, "abcd");
int str_len = strlen(str);
int str_size = sizeof(str);
printf("strlen(str) = %d\n", (str_len));
printf("sizeof(str) = %d\n", (str_size));
return 0;
}
运行结果如下:
strlen(str) = 4
sizeof(str) = 100
int mystrlen(char *str) {
int i =0;
while(*(str + (++i)));
return i;
}
int main2() {
printf("字符数组赋值\n");
char str[11] ="abc";
//字符串循环
int i;
for(i=0;i<11;i++) {
str[i] ='i';
}
printf("str= %s\n",str);
//strcpy 赋值
//str =abdcd\0
strcpy(str,"abdcd");
printf("str= %s\n",str);
printf("sizeof(str)= %d\n",sizeof(str));
printf("strlen(str) = %d\n",strlen(str));
printf("mystrlen(str) = %d\n",mystrlen(str));
return 0;
}
运行的结果如下:
字符数组赋值
str= iiiiiiiiiii\0--->这里输出有个空格
str= abdcd
sizeof(str)= 11//这里申请了内存的大小,因此sizeof为11
strlen(str) = 5
mystrlen(str) = 5
字符串拼接相关的代码如下:
void mystrcat(char *s1,char *s2) {
//s1= abc s2= 123 s1+s2 = abc123
while(*s1) s1++;
while(*s1 ++ = *s2 ++ );
}
int main3() {
printf("字符串拼接\n");
//字符数组存放再堆中,可以修改,而字符指针无法修改,只读存放在常量池
char s1[10] ="abc";
char s2[10] ="123";
//用字符串指针就会出现问题,无法拷贝
//char *s1 = "abc";
//char *s2 = "1234";
//strcat(s1,s2);
printf("s1 = %s\n",s1);
mystrcat(s1,s2);
printf("s1 = %s\n",s1);
return 0;
}
运行的结果如下:
字符串拼接
s1 = abc
s1 = abc123
//字符串拷贝
int main() {
printf("字符串拷贝\n");
char *s5 = "hello";
char s1[20];
strcpy(s1,s5);
printf("s1 = %s\n",s1);
char str[10] = "abc";
strncpy(str,"33342",3);
printf("str = %s\n",str);
//比较是否相等 相等为0 ,不相同后者大为 -1,前者比后者大为1
printf("%d \n",strcmp("abc","chd"));
printf("%d \n",strcmp("abc","abc"));
printf("%d \n",strcmp("b","a"));
return 0;
}