C语言 -- 字符串 -- 参考翁恺C语言程序设计

怎样定义一个C语言的字符串?

比如:

char word[]={'H','e','l','l','o','!','\0'};

这个数组总共有7个单元,最后一个单元放的是 0,因为这个0使得这个word成为了C语言的一个字符串。
对于C语言来说,字符串是以0(整数0)结尾的一串字符(0或’\0’是一样的,但是和’0’不同)。
0标志字符串的结束,但它不是字符串的一部分。
两个相邻的字符串常量会被自动连接起来。
字符串以数组的形式存在,以数组或指针的形式访问,更多是以指针的形式访问。
string.h 里有很多处理字符串的函数。
又比如:

char line[10] = "Hello";

定义了一个长度为 10 的,叫做 line 的 char 类型数组。
“Hello” ----这样一个由双引号括起来的东西在C语言中叫做字符串常量, “Hello” 会被编译器变成一个字符数组放在某处,这个数组的长度是 6 ,因为结尾还有一个表示结束的 0 。

字符串变量

可以有以下几种表达形式:

char *str = "Hello";
char word[] = "Hello";
char line[10] = "Hello";

除了字面上的字符,编译器会替我们在结尾生成一个\0的。

总结
在这里插入图片描述

当程序里需要一个字符串的时候,是写成指针形式还是数组形式呢?

如果要构造一个字符串,用数组;如果要处理一个字符串,用指针。
在这里插入图片描述

char*是不是字符串?

在这里插入图片描述

字符串的输入输出

安全的输入:

char string[8];
scanf("%7s", string);

在%和s之间的数字表示最多允许读入的字符的数量,这个数字应该比数组的大小小一。
空字符串:eg:
char buffer[100]=""; 这是一个空的字符串,buffer[0] == ‘\0’
char buffer[]=""; 这个数组的长度只有1。

字符串数组

在这里插入图片描述

程序参数

其实main()函数的参数表不是空的,是有参数的,即:

int main(int argc, char const *argv[])

第一个是整数,第二个是字符串数组。整数是用来说明数组中有多少字符串的。eg:(用来看输出什么的)

#include<stdio.h>

int main(int argc, char const *argv[])
{
	int i;
	for(i=0; i<argc; i++)                 //遍历数组
	{
		printf("%d:%s\n", i, argv[i]);
	}
	return 0;
}

输出为:

sunyuhang@666:~/c$ ./1
0:./1
sunyuhang@666:~/c$ ./1 123 asdf
0:./1
1:123
2:asdf

字符串函数(用到时再细看)

函数目的
strcpy(s1, s2);复制字符串 s2 到字符串 s1
strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。
strlen(s1);返回字符串 s1 的长度
strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0
strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置

strcpy和strcat会由于目的地没有足够的空间,可能出现安全问题,建议尽量不要使用。
安全版本:

char *strncpy(char *restrict dst, const char *restrict src, size_t n);  //n表示最多可以拷贝过去的字符数
char *strncat(char *restrict s1, const char *restrict s2, size_t n);   //n表示最多可以连上的字符数
int strncmp(const char *s1, const char *s2, size_t n);    //只判断前n个字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值