C语言字符串总结

目录

1、字符串的初始化  

2、字符数组中scanf的使用 

3、字符数组中gets的使用(不推荐)

4、字符数组中fgets的使用

5、字符数组中puts的使用

6、字符数组中fputs的使用

7、字符数组中strlen的使用

8、字符数组中strcpy、strncpy的使用

9、字符数组中strcmp、strncmp的使用

10、字符数组中strcat、strncat的使用

  • C语言中没有字符串类型,字符串是存在字符数组中的。
  • 字符串一定是字符数组,字符数组不一定是字符串。
  • 如果字符数组以'\0'或者数字0结尾,那么这个字符数组就是字符串。
  • 注意越界问题
  • 加上头文件#include <string.h>

    1、字符串的初始化  

  • #include<stdio.h>
    #include<string.h>
    int main(){
    	char a1[10] = {'h','e','l','l','o'};//字符数组
    	char a2[10] = {'h','e','l','l','o','\0'};//字符串
    	char a3[10] = {'h','e','l','l','o',0};//字符串
    	char a4[10] = "hello";//字符串,系统自动在字符串结尾分配一个'\0'
    	char a5[] = "hello";//字符串
    	char a6[] = "\0hello";//字符串
    	char a7[] = "\012hello";//字符串;\0后面最好不要接数字,避免组成其他转义字符 
    	printf("a1 = %s\n",a1); 
    	printf("a2 = %s\n",a2); 
    	printf("a3 = %s\n",a3);
    	printf("a4 = %s\n",a4); 
    	printf("a5 = %s\n",a5); 
    	printf("a6 = %s\n",a6); 
    	printf("a7 = %s\n",a7); 
    	return 0;
    }

      

    2、字符数组中scanf的使用 

  • scanf缺点:不做越界检查。
  • scanf在遇到空格和tab时会停止读取,在遇到\n也就是回车时结束输入。
    #include<stdio.h>
    #include<string.h>
    int main(){
    	char str[100] = {0};
    	char tmp[100] = {0};
    	char a[10];
    	scanf("%s", str);
    	printf("%s\n", str);
    	scanf("%s",tmp);
    	printf("%s\n",tmp);
    	scanf("%s", a);
    	printf("%s\n",a);
    	return 0;
    }

      

  • #include<stdio.h>
    #include<string.h>
    int main(){
    	char str1[10];
    	char str2[10];
    	scanf("%s", str1);
    	scanf("%s", str2);
    	printf("%s\n",str1);
    	printf("%s\n", str2);
    	return 0;
    }

  • 3、字符数组中gets的使用(不推荐)

  • #include<stdio.h>
    #include<string.h>
    int main(){
    	char str[10];
    	gets(str);
    	printf("%s\n",str);
    	return 0;
    }
  • a. gets允许有空格,不读换行符,不做越界检查,不安全

  • b.gets(str)与scanf(“%s”.str)的区别gets(str)允许输入的字符串含有空格scanf(“%s”.str)不允许含有空格

  • c.由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到
    文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况

4、字符数组中fgets的使用

#include<stdio.h>
#include<string.h>
int main(){
	char str[10];
	fgets(str,sizeof(str),stdin);
	printf("%s\n", str);
	return 0;
}


1)一般形式: char *fgets(char *s,int size,FILE*s tream);
2)功能:从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size -1个字符为止,最后会自动加上字符'\0’作为字符串结束
3)注意事项:

a.如果输入内容>size-1,只取size-1

b.空格,换行符也会读入

c.fgets函数是安全的。

5、字符数组中puts的使用

#include<stdio.h>
#include<string.h>
int main(){
	char str[] = "china";
	puts(str);
	printf("%s",str);
	return 0;
}

1)一般形式:int puts(const char *s );
2)功能:标准设备输出s字符串,在输出完成后自动输出一个'\n'。

3)注意事项:
a. puts只是将字符串输出到屏幕显示时自动加换行,但字符串本身并没有变化。
  

6、字符数组中fputs的使用

#include<stdio.h>
#include<string.h>
int main(){
	char str[] = "china";
	fputs(str,stdout); 
	return 0;
}

1)一般形式: int fputs(const char * str,FILE* stream) ;
2)功能:将str所指定的字符串写入到stream指定的文件中,字符串结束符'\0'不写入文件。

3)注意事项:
a.fputs不会自动加换行符
b.如果是固定输出到屏幕,则写为stdout。
 

7、字符数组中strlen的使用

功能:计算指定字符串str的长度,不包含字符串结束符'\0'

sizeof是测数据类型的长度,不会因为结束符而提前结束。

#include<stdio.h>
#include<string.h>
int main(){
	char str1[] = "china";
	char str2[] = "\0china";
	char str3[10] = "china";
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	int len3 = strlen(str3);
	printf("%d,sizeof(str1)=%d\n", len1,sizeof(str1)); //5 6 
	printf("%d,sizeof(str2)=%d\n", len2,sizeof(str2)); //0 7
	printf("%d,sizeof(str3)=%d\n", len3,sizeof(str3)); //5 10
	
	char str4[10];
	scanf("%s",str4);
	printf("%d\n",strlen(str4)); //读空格前面的 
	
	char str5[10];
	gets(str5);
	printf("%d\n",strlen(str5));//可以读空格,空格这些字符也记作长度 
	
	char str6[10];
	fgets(str6,sizeof(str6),stdin); //fgets可以读换行符 
	printf("%d\n",strlen(str6));//加上换行符和空格 ,但不读\0 
	return 0;
}

8、字符数组中strcpy、strncpy的使用

strcpy:

功能:把src所指向的字符串复制到dest所指向的空间中,'\0'也会拷贝过去。

复制元素:从首元素开始到'\0'结束。

strncpy:

功能:把src所指向的字符串的前n个字符复制到dest所指向的空间中,

是否拷贝结束符看指定的长度是否包含'\0'

#include<stdio.h>
#include<string.h>
int main(){
 	char src[100] = "hello world";
	char dest[100];
	char src2[100] = "hello world";
	char dest2[100];
	strcpy(dest,src);
	strcpy(dest2,src2);
	printf("%s\n",dest);//hello world
	printf("%s\n",dest2);//hello world
	return 0;
}

9、字符数组中strcmp、strncmp的使用

strcmp:

功能:比较s1和s2的大小,比较的是字符ASSCII码大小

strncmp:

功能:比较s1和s2前n个字符的大小,比较的是字符ASSCII码大小

俩函数返回值如下:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。
#include<stdio.h>
#include<string.h>
int main(){
 	char s1[] = "abc";
 	char s2[] = "abcd";
 	int result  = strcmp(s1,s2);
 	printf("%d\n", result);
	return 0;
}

10、字符数组中strcat、strncat的使用

strcat:

功能:将src字符串连接到dest的尾部,'\0'也会追加过去。

strncat:

功能:将src字符串前n个字符连接到dest的尾部,'\0'也会追加过去。
 

#include<stdio.h>
#include<string.h>
int main(){
 	char src[] = "nihao";
 	char dest[] = "China";
	strncat(dest,src,5);
	printf("%s\n",dest);  //Chinanihao
	return 0;
}

以上就是我对字符串学习的总结。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值