C语言菜鸟教程:字符数组和字符串
基本使用
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
char arr[3] = { 'a','b','c' };
int size = sizeof(arr) / sizeof(arr[0]);
for (int i=0;i<size;i++)
{
printf("%c ", arr[i]);
}
printf("\n");
return 0;
}
输出:
a b c
字符串是字符数组
如果字符数组中含有'\0'
,那么这个字符数组就是一个字符串。
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
// 这可以当成是字符串
char arr[4] = { 'a','b','c','\0' };
// 直接打印字符串
printf("%s\n", arr);
return 0;
}
输出:
abc
字符数组可以存字符串
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
// 字符数组可以直接存字符串
// char arr[4] = { 'a','b','c','\0' };
// 和上面的表达式等价
char arr[4] = "abc";
// 直接打印字符串
printf("%s\n", arr);
return 0;
}
输出:
abc
scanf录入字符串
注意,下面的这种方式容易造成内存污染。比如开辟的是3个字符空间,但是输入的字符超过了3个,就会造成内存污染,因为输入会占用未开辟的空间。
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
// 定义字符数组,实际上是个字符串
// 这里的128也可以是其他数字
char num[128] = "";
// 录入字符串
printf("请输入:");
// 注意:这里的num没有加&,因为scanf需要的是变量的首元素地址
scanf("%s", num);
// 输出
printf("您输入的是:%s\n", num);
return 0;
}
输出:
请输入:abcdefg
您输入的是:abcdefg
fgets录入字符串
这个方法相对来说比较安全,因为第二个参数可以指定最大可以读多少个字符。
这个方法会把最后结束的\n
也读取进来。
示例代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
// 定义字符数组,实际上是个字符串
// 这里的128也可以是其他数字
char num[128] = "";
// 录入字符串
printf("请输入:");
// 注意:这里的num没有加&,因为scanf需要的是变量的首元素地址
fgets(num,sizeof(num), stdin);
// 输出
printf("您输入的是:%s\n", num);
return 0;
}
输出:
请输入:abc
您输入的是:abc
字符数组拼接
这是一个非常综合的知识点,涉及到的东西比较多,主要如下:
-
字符串本质上是一个字符数组,这个字符数组以 \0
结束 -
字符数组的名称本质上是这个字符数组在内存中的首地址 -
指针可以做加减法运算
示例代码:
#include <stdio.h>
#include <string.h>
// 字符数组拼接
void myStrcat(char *str1, char *str2) {
// str1的长度
int n = strlen(str1);
// str2中的遍历序号
int i = 0;
// 当str2中还没有遍历完的时候,一直遍历
while (*(str2 + i) != 0) {
// 将str2中的值依次追加到str1后面
*(str1 + n + i) = *(str2 + i);
i++;
}
// 最后,在str1的末尾补0,表示这是一个字符串,已经结束
*(str1 + n + i) = 0;
}
int main(void) {
// 定义两个字符数组
char str1[128] = "hello";
char str2[128] = "123456";
// 输出
printf("%s\n", str1);
printf("%s\n", str2);
// 将str2拼接在str1的后面
myStrcat(str1, str2);
// 输出
printf("%s\n", str1);
printf("%s\n", str2);
return 0;
}
输出:
hello
123456
hello123456
123456
string.h中的字符数组拼接
在string.h中,内置了一个strcat方法,用于实现字符数组的拼接。
示例代码:
#include <stdio.h>
#include <string.h>
int main(void) {
// 定义两个字符数组
char str1[128] = "hello";
char str2[128] = "123456";
// 输出
printf("%s\n", str1);
printf("%s\n", str2);
// 将str2拼接在str1的后面
strcat(str1, str2);
// 输出
printf("%s\n", str1);
printf("%s\n", str2);
return 0;
}
输出:
hello
123456
hello123456
123456
THE END