字符串
char str[] = {'V', 'V', 'c', 'a', 't', '\0'};
  • 字符串最适合放在char数组中存储。
  • 在字符串字面量的末尾加上一个叫作 null 字符的值为0的字符。用八进制转义字符表示 null 字符就是 ‘\0’ 。若用整数常量来表示就是0。
  • 末尾的 null 字符 ‘\0’ 是字符串结束的 “标志”。

注:

  • 由 5 个字符组成的字符串字面量 “VVcat” 实际上占用了 6个字符的内存空间。
  • 字符串字面量的中间也可以有 null 字符。不过应注意区分。字符串字面量 “ABC” 是字符串,而字符串字面量 “VV\0cat” 不是字符串。
#include <stdio.h>int main(void){printf("sizeof(\"vvcat\")  = %u\n",    (unsigned)sizeof("vvcat"));printf("sizeof(\"vv\0cat\")  = %u\n",    (unsigned)sizeof("vv\0cat"));
}

运行结果:

字符数组的初始化
  1. 以下3种形式都可以实现字符数组的初始化赋值。
 1. char str[] = {'V', 'V', 'c', 'a', 't', '\0'};2. char str[] = "VVcat";3. char str[] =  {"VVcat"};

因为初始值的个数决定了数组元素的个数,所以元素个数可以省略。

  1. 除了初始化赋值的时候,不能将数组的初始值或字符串直接赋予数组变量。
    以下3种是错误的赋值方式:
char str[6];
1. str = {'V', 'V', 'c', 'a', 't', '\0'};
2. str = "VVcat";
3. str =  {"VVcat"};
  1. 若像下面这样声明,末尾就不会加上 null 字符。

    char str[] = {‘V’, ‘V’, ‘c’, ‘a’, ‘t’};
    这样的声明的变量不会被当做字符串,我们把它当做 5 个字符的集合,也就是“普通的”数组。

正确的赋值方式:

#include <stdio.h>int main(void){char str[6];str[0] = 'V';str[1] = 'V';str[2] = 'C';str[3] = 'A';str[4] = 'T';str[5] = '\0';printf("字符串 str 为 \"%s\"。 \n", str);return 0;
}

运行结果:

数据虽然长度定义为6,但是除了null字符之外,剩下只可存储5个字符。

注:
如果将 ‘\0’ 放在数组的中间某个位置会出现以下结果:

#include <stdio.h>int main(void){char str[6];str[0] = 'V';str[1] = 'V';str[2] = '\0';   // 将  '\0' 放在 下标为3的位置str[3] = 'C';str[4] = 'A';str[5] = 'T';printf("字符串 str 为 \"%s\"。 \n", str);return 0;
}

运行结果:

null 字符 ‘\0’ 是字符串结束的 “标志”。

空字符串

char name[] = "";
char s[] = {'\0'};

一个字符也没有的字符串,称为空字符串。因为即使没有字符,也需要表示结束的null字符,所以在内存空间上只有一个null字符。

#include <stdio.h>int main(void){char name[] = ""; // 对数组初始化char s[] = {'\0'};printf("(unsigned)sizeof(name) = %u\n", (unsigned)sizeof(name));printf("(unsigned)sizeof(s) = %u\n", (unsigned)sizeof(s));printf("请输入名字:");scanf("%s", name);  // 不需要加上 &printf("早上好, %s !!\n", name);printf("中午好, %3s !!\n", name);printf("晚上好, %.3s !!\n", name);printf("夜晚了, %8s !!\n", name);printf("该睡了, %-8s !!\n", name);return 0;
}

运行结果:

为了从标准输入读取字符串,需要把scanf函数的转换说明设为 %s ,还必须传入数组name。
另外,scanf函数在将从键盘读取的字符串存储到数组中时,会在末尾加上null字符。

总结:
  • 1.输出最小宽度

    • %3s 表示至少输出 3位 实际位数。如果省略或实际输出的字符串位数超过指定值,则按实际位数输出。
    • 如果设置了 - 标志,则表示左对齐,否则表示右对齐(空白部分填补空格)。
  • 2.精度
    • %.3s 指定显示位数的上限为 3(即不可能显示超过指定位数的字符,超过则截去)。
  • 3.转换说明符
    • s 表示输出字符串。即输出数组的字符,直到null字符的前一个字符为止。如果没有指定精度或精度大于数据长度,则数组中必须含有null字符。

C语言 字符串的读取相关推荐

  1. C语言字符串左右排序交换

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105164028 C ...

  2. 关于c语言字符串函数和一些内存函数的的简介

    关于c语言字符串函数和一些内存函数的的简介 求字符串长度的函数 strlen函数介绍![在这里插入图片描述](https://img-blog.csdnimg.cn/20190301142458376 ...

  3. c++ 字符串连接_C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

  4. C语言的文件读取与写入操作

    学了一年的C语言了,现在回过头来做一下总结.并且博客开了挺长一段时间却没有谢什么实际的东西.现在做下总结,对之后的学习帮助应该挺大的.与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具 ...

  5. C语言——字符串指针篇

    说明:   本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉.   QQ 群 号:513683159 [相 ...

  6. C语言字符串指针(指向字符串的指针)详解

    C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在<C语言字符数组和字符串>中已经进行了详细讲解,这里不妨再来演示一下: #include <stdio.h&g ...

  7. C语言—字符串与字符数组,字符串数组与字符串指针的区别

    字符串与字符数组 字符串一定是一个char的数组,但char的数组未必是字符串.--以字符'\0'结尾的char数组就是一个字符串,但如果char数组没有以'\0'结尾,那么就不是一个字符串,只是普通 ...

  8. c语言向字符串追加一个字符串,C语言字符串拼接和追加.doc

    C语言字符串拼接和追加.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档 ...

  9. C语言字符串、文件操作常用操作函数,

    C语言字符串常用操作函数 C语言字符串.文件操作常用操作函数 字符串输出 - puts() 字符串输入 - gets() 字符串比较 - strcmp() 字符串复制 - strcpy() 字符串连接 ...

最新文章

  1. 开启注册丨全国社交媒体处理大会(SMP 2020)召开,98场报告日程全公开
  2. Marshal.ReleaseComObject
  3. leetcode17 电话号码的字母组合
  4. Java 基础 - 面向对象(不错)
  5. Ubuntu14.04 kylin 安装配置Tomcat7服务器
  6. 操作方法:具有多个Mongo存储库和Kotlin的Spring Boot 2 Web应用程序
  7. java中访问修饰符_Java中的非访问修饰符是什么?
  8. 江民杀毒软件KV网络版反病毒整体解决方案──金融行业
  9. 绝了!RNN 还会写藏头诗!
  10. 8.SOA架构:服务和微服务分析及设计--- Web服务及REST服务的服务API与契约版本控制
  11. C++ set 排序 修改元素之后不会改变原来的排序
  12. 前端-----小米商城模块练习
  13. js json转excel并下载
  14. java jar 是什么_java中的jar文件是什么
  15. SQL 登录名和数据库用户
  16. C#序列化和反序列化到底是什么意思
  17. android 自动加微信群,如何完美实现微信自动发朋友圈自动添加好友等等
  18. 别总说CMS、G1,该聊聊ZGC了
  19. 嵌入式ARM设计编程(二) 字符串拷贝
  20. javascript运算符_双重否定运算符是什么! 用JavaScript做?

热门文章

  1. 完全掌握JavaMail
  2. 关于Struts2的jsp页面的注释
  3. HttpConnectionUtil
  4. 自定义圆环progressbar
  5. 理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]...
  6. 【翻译】如何创建Ext JS暗黑主题之一
  7. SQLite中不支持的sql语法
  8. 【转】Socket状态变迁图
  9. 在showModalDialog和showModelessDialog中提交form时不弹出新窗口
  10. 加载Loader.bin