c语言编程学习之字符串
发布日期:2021-05-20 15:08:00 浏览次数:16 分类:原创文章

本文共 1372 字,大约阅读时间需要 4 分钟。

字符串字面量与字符变量

1.字符串字面量

字符串字面量是一对双引号括起来的字符序列。当c语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间。这块内存空间用来存储字符串字面量中的字符,末尾再存储一个额外字符(空字符)。空字符是一个所有位都为0的字节,用转义字符\0表示。它标志了字符串的结束。

我们知道printf函数的参数接受char*类型的值作为它的第一个参数。
对于printf("abc");,我们传给它一个指针,这个指针为"abc"字面量所在地址的首地址。也就是说,我们传进去的不是这个字面量,而仅仅是一个指针而已。

对于字符串字面量char *s = "abc"来说,我们可以用*(s+偏移量)的方式访问其中字符。也可用数组下标的方式访问,如s[偏移量]

而试图改变字符串字面量的行为是错误的,如*s = "ab"是错误的。

注意:不要再需要字符串的时候使用字符(反之亦然)!
如函数调用printf("a");是合法的,但函数调用printf('a');是非法的。
这是因为printf函数期望指针作为它的第一个参数,前者为字符串字面量"a"的指针,后者为字符常量'a'。
字符串字面量"a"是用指针来表示的,这个指针指向存放"a"的内存单元。字符常量'a'是用整数(字符集的ASCII码)表示的。

2.字符串变量

常用声明方式:

#define STR_LEN 80char str[STR_LEN+1];

当声明用于存放字符串的字符数组时,要始终保证数组的长度比字符串的长度多一个字符。这是因为C语言规定每个字符串都要以空字符结尾。

有两种用键盘获取一行字符串的方式:
① gets(str);
这种方式默认输入流是stdin,也就是默认键盘输入。它会直接读入一行,并舍弃掉换行符,然后在字符串最后放入'\0'。但使用它是有风险的,因为读入的一行的字符数量可能会超过str字符数组能存储量的最大值,这样就会发生越界。
② fgets(str,sizeof(str),stdio);
这个函数读入一行,但会把末尾的换行符也读入数组中。使用它是安全的,因为我们传入了str字符数组的大小,它根据字符数组大小来读入字符,若已读取了sizeof(str)-1个字符,就不往下接着读入字符了,然后在字符串末尾放入'\0'。

代码

#include <stdio.h>int main(){    char a[30];    gets(a);    // fgets(a, sizeof(a), stdin);  //最后的换行符也会被读入    printf("%s\n", a);    return 0;}

输入

Hello handsome guy !

运行

Hello handsome guy !

代码

#include <stdio.h>int main(){    char a[30];    // gets(a);    fgets(a, sizeof(a), stdin);  //最后的换行符也会被读入    printf("%s\n", a);    return 0;}

输入

Hello handsome guy !

运行

Hello handsome guy !
上一篇:c语言实现将文件中小写字母转为大写字母
下一篇:经典永不过时!重温设计模式

发表评论

最新留言

很好
[***.229.124.182]2025年04月14日 13时59分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

2024最新最全CTF入门指南(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2024最新科普什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-29
2024最新程序员接活儿搞钱平台盘点 2025-03-29
2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2024版最新网络安全教程从入门到精通,看完这一篇就够了 2025-03-29
2025想做黑客?先来学习 SQL 注入,零基础入门到精通,收藏这篇就够了 2025-03-30
2025最新大模型技术学习过程梳理,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版万字长文入门大语言模型(LLM)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新0基础怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新一文彻底搞懂大模型 - Agent(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新关于HW护网行动的一些知识,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大模型学习路线,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-30
2025版最新大模型微调方法(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大语言模型的指令微调,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新小白学习大模型:什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新常用黑客工具之【Nmap 教程基础】零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新渗透测试和黑客工具列表,零基础入门到精通,收藏这一篇就够了 2025-03-30