C语言字符串入门级——字符串定义、字符串函数

C语言字符串入门级——字符串定义、字符串函数

入门级知识点,可能不全,之后想起来再更新:

一、字符串

几种字符串的定义方式:

#include

int main()

{

char *month[3]={"Jan","Feb","March"};

printf("%s\n",month[2]);

//month前面必须有星号,否则报错

char greeting[6]="Hello";

printf("%s\n",greeting);

//greeting[n],当n小于6时,运行会报错

char hello[]="Hello";

printf("%s\n",hello);

//方括号里不添加数组长度也可以

char *p="Greetings!";

printf("%s\n",p);

//指针型字符串,如果输出换成*p会报错

char c[]={'H','e','l','l','o'};

printf("%s\n",c);

printf("input:\n");

char inputc[10];

gets(inputc);

printf("%s",inputc);

return 0;

}

字符串以数组的形式存在数组表示,以‘\0’结尾。(0和‘\0’是一样的)

0标志字符串的结束,但是不属于字符串的一部分

头文件:

字符串变量:所占空间总比字母数多一个

Eg: "Hello"会被编译器会变成一个字符数组放在某处

不能用运算符对字符串做运算:

python可以做加乘,但是C 只能作为数组来处理

字符串变量

char *s=“Hello world”

等价于以下两个语句:

char *s;

s=“Hello world”

*这里的s是一个指针,初始化为指向一个字符串常量,是只读的,不能通过s[0]='L’来更改字符串

实际上,S是const char s

定义一个可以修改的字符串,应该用数组:char s[]=“Hello world”

指针还是数组:

1.数组:表示这个字符串就在这

作为本地变量,空间被自动回收

2.指针:这个字符串不知道在哪里

1)只表达一个字符串,只读

2)处理参数

3)动态分配空间

字符串可以表示成char *的形式,但是char *不一定表示字符串

char *本意是指向字符的指针,可能指向的是字符的数组

字符串的赋值:

char *t=“Hello”

char *p

p=t

此时,p指向t所指的字符串,在存储空间中,并没有产生一个新的字符串

字符串的输入输出:%

无论是scanf还是printf 都可以用%s

Scanf 读入一个string 到空格,tab结束

安全做法:scanf("&7s") 指定最多能读几位

字符串数组:用一个数组,表示很多个字符串

二、字符串函数

1、单字符的输入输出:

putchar 函数:

int putchar (int c)

向标准输出写入一个字符

返回值:返回写了几个字符,EOF(-1)表示失败

Eg:

char a=‘B’ //只能定义一个字符

putchar (a) //相当于printf("%c",a)

getchar 函数:

不需要有参数:int getchar (void)

从标准输入读入一个字符,返回值是这个字符

返回值的类型是int 是为了:返回EOF(-1)

Eg:

char a=getchar()

putchar(a)

1)gets()用于从标准输入流stdin读入一个整行(以’\n’或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的’\n’从流中取出,但不写入数组。gets()不检查被写入的数组大小。

gets(str)

puts(str) //str是定义的数组名

2)getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。

2、strlen 函数

srtlen (const char *s) :返回s的字符串长度(不包含结尾的0)

代码:

#include

#include

int main()

{

char line[]=“Hello”;

printf(“strlen=%lu \n”,strlen(line));

printf(“sizeof=%lu \n”,sizeof(line));

return 0;

}

sizeof的结果比strlen多一位,因为最后多一个0,sizeof得出的是指针所指向的所有空间

3.strcmp函数

用于比较两个字符串(以及其大小):

Int strcmp (const char s1,const chars2)

返回值:

0: s1==s2

1: s1>s2

-1: s1

代码:

#include

#include

int main()

{

char s1[]=“abc”;

char s2[]=“Abcd”;

int c=strcmp(s1,s2);

printf("%d",c);

return 0;

}

4.strcpy 函数

char *strcpy (char * restrict dst , const char *restrict src)

作用:把src的字符串拷贝到dst,restrict 表示dst 与src 不重叠(C99)

返回:dst

复制一个字符串:代码

#include

#include

#include

int main()

{

char *src="Hello";

char *dst=(char*)malloc(strlen(src)+1);

strcpy(dst,src);

printf("%s",dst);

return 0;

}

5.strcat 函数

Char *strcat(char *restrict s1,const char *restrict s2 )

把s2拷贝到s1后面,接成一个长字符串 (s1必须有足够的空间)

返回:s1

安全版本:strncpy,strncmp,strncat 括号最后多一项:size_t n 表示最多操作的字符个数

相关推荐

圣斗士星矢:连续十五针才能解决对手,米罗是最弱的黄金圣斗士?
2025年十大正规靠谱的手机兼职赚钱平台app排行榜
野蛮时代最新兑换码2023 野蛮时代礼包兑换码大全
临时有事离开标语怎么写 , 营业时间提示牌

本文标签