字符串数组

字符串数组

  • strcat的使用需要注意数组长度的设置。
1
2
3
4
5
6
7
8
#include <stdio.h> 
#include <string.h>
int main(){
char str1[10]="People";
char str2[]="China";
printf("%s", strcat(str1,str2));
return 0;
}

会报错:zsh: illegal hardware instruction "/Users/bob/Desktop/C/平行四边形/"b

原因是strcat(str1,str2)是把str2的内容直接加在了str1的尾部,但是并不会预先检测str1的长度是否足够容纳两个字符串的内容。这一函数是不安全的,不会再运行时进行越界检查。

修改:

1
2
3
4
5
6
7
8
#include <stdio.h> 
#include <string.h>
int main(){
char str1[20]="People";
char str2[]="China";
printf("%s", strcat(str1,str2));
return 0;
}

结果:

1
PeopleChina
  • 字符串数组赋值语法
1
char str1[]={"abcd"};

等价于

1
char str1[]={'a','b','c','d'};

等价于

1
char str1[]="abcd";
  • strcpy函数进行字符串复制
1
2
char str1[10],str2[]="China";
strcpy(str1,str2);

也相当于

1
2
char str1[10];
strcpy(str1,"China");

❌错误写法:

1
2
3
4
5
6
7
#include <stdio.h> 
#include <string.h>
int main(){
char str1[5],str2[5]="China";
str1=str2;
puts(str1);
}

这段代码会在编译时出错,因为它试图将一个字符串数组的地址赋给另一个数组名称。这是非法的,因为数组名称实际上是一个常量指针,不能被赋值。如果需要将一个字符串数组复制到另一个数组,应该使用库函数strcpy()或memcpy()。修改后的代码如下:

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <string.h>
int main(){
char str1[6], str2[6]="China";
strcpy(str1, str2);
puts(str1);
return 0;
}
  • strncpy函数

strncpy(str1,str2,2)作用是将str2中最前面2个字符复制到str1中,str1中原有的最前面2个字符。

  • strcmp函数

strcmp(str1,str2)返回一个整数。

两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <string.h>
int main(){
int t;
t=strcmp("CHina","China");
printf("%d",t);
return 0;
}

输出:

1
-1
  • strlen函数输出字符串的实际长度
  • strlwr把大写转换为小写
  • strupr把小写转换为大写

字符串数组
https://brockshuai.github.io/2023/05/22/程序设计复习/
作者
神仙魚
发布于
2023年5月22日
许可协议