目录
1、字符串的初始化
2、字符数组中scanf的使用
3、字符数组中gets的使用(不推荐)
4、字符数组中fgets的使用
5、字符数组中puts的使用
6、字符数组中fputs的使用
7、字符数组中strlen的使用
8、字符数组中strcpy、strncpy的使用
9、字符数组中strcmp、strncmp的使用
10、字符数组中strcat、strncat的使用
- C语言中没有字符串类型,字符串是存在字符数组中的。
- 字符串一定是字符数组,字符数组不一定是字符串。
- 如果字符数组以' '或者数字0结尾,那么这个字符数组就是字符串。
- 注意越界问题
- 加上头文件#include
1、字符串的初始化
-
#include
#include int main(){ char a1[10] = {'h','e','l','l','o'};//字符数组 char a2[10] = {'h','e','l','l','o',' '};//字符串 char a3[10] = {'h','e','l','l','o',0};//字符串 char a4[10] = "hello";//字符串,系统自动在字符串结尾分配一个' ' char a5[] = "hello";//字符串 char a6[] = " hello";//字符串 char a7[] = " 12hello";//字符串; 后面最好不要接数字,避免组成其他转义字符 printf("a1 = %sn",a1); printf("a2 = %sn",a2); printf("a3 = %sn",a3); printf("a4 = %sn",a4); printf("a5 = %sn",a5); printf("a6 = %sn",a6); printf("a7 = %sn",a7); return 0; } 2、字符数组中scanf的使用
- scanf缺点:不做越界检查。
- scanf在遇到空格和tab时会停止读取,在遇到n也就是回车时结束输入。
#include
#include int main(){ char str[100] = {0}; char tmp[100] = {0}; char a[10]; scanf("%s", str); printf("%sn", str); scanf("%s",tmp); printf("%sn",tmp); scanf("%s", a); printf("%sn",a); return 0; } -
#include
#include int main(){ char str1[10]; char str2[10]; scanf("%s", str1); scanf("%s", str2); printf("%sn",str1); printf("%sn", str2); return 0; } - 3、字符数组中gets的使用(不推荐)
-
#include
#include int main(){ char str[10]; gets(str); printf("%sn",str); return 0; } -
a. gets允许有空格,不读换行符,不做越界检查,不安全
-
b.gets(str)与scanf(“%s”.str)的区别gets(str)允许输入的字符串含有空格scanf(“%s”.str)不允许含有空格
-
c.由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到
文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况
4、字符数组中fgets的使用
#include
#include
int main(){
char str[10];
fgets(str,sizeof(str),stdin);
printf("%sn", str);
return 0;
}
1)一般形式: char *fgets(char *s,int size,FILE*s tream);
2)功能:从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size -1个字符为止,最后会自动加上字符' ’作为字符串结束
3)注意事项:
a.如果输入内容>size-1,只取size-1
b.空格,换行符也会读入
c.fgets函数是安全的。
5、字符数组中puts的使用
#include
#include
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
#include
int main(){
char str[] = "china";
fputs(str,stdout);
return 0;
}
1)一般形式: int fputs(const char * str,FILE* stream) ;
2)功能:将str所指定的字符串写入到stream指定的文件中,字符串结束符' '不写入文件。
3)注意事项:
a.fputs不会自动加换行符
b.如果是固定输出到屏幕,则写为stdout。
7、字符数组中strlen的使用
功能:计算指定字符串str的长度,不包含字符串结束符' '
sizeof是测数据类型的长度,不会因为结束符而提前结束。
#include#include int main(){ char str1[] = "china"; char str2[] = " china"; char str3[10] = "china"; int len1 = strlen(str1); int len2 = strlen(str2); int len3 = strlen(str3); printf("%d,sizeof(str1)=%dn", len1,sizeof(str1)); //5 6 printf("%d,sizeof(str2)=%dn", len2,sizeof(str2)); //0 7 printf("%d,sizeof(str3)=%dn", len3,sizeof(str3)); //5 10 char str4[10]; scanf("%s",str4); printf("%dn",strlen(str4)); //读空格前面的 char str5[10]; gets(str5); printf("%dn",strlen(str5));//可以读空格,空格这些字符也记作长度 char str6[10]; fgets(str6,sizeof(str6),stdin); //fgets可以读换行符 printf("%dn",strlen(str6));//加上换行符和空格 ,但不读 return 0; }
8、字符数组中strcpy、strncpy的使用
strcpy:
功能:把src所指向的字符串复制到dest所指向的空间中,' '也会拷贝过去。
复制元素:从首元素开始到' '结束。
strncpy:
功能:把src所指向的字符串的前n个字符复制到dest所指向的空间中,
是否拷贝结束符看指定的长度是否包含' '
#include#include 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("%sn",dest);//hello world printf("%sn",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#include int main(){ char s1[] = "abc"; char s2[] = "abcd"; int result = strcmp(s1,s2); printf("%dn", result); return 0; }
10、字符数组中strcat、strncat的使用
strcat:
功能:将src字符串连接到dest的尾部,' '也会追加过去。
strncat:
功能:将src字符串前n个字符连接到dest的尾部,' '也会追加过去。
#include#include int main(){ char src[] = "nihao"; char dest[] = "China"; strncat(dest,src,5); printf("%sn",dest); //Chinanihao return 0; }
以上就是我对字符串学习的总结。



