1、C语言中没有字符串这种数据类型,可以通过char的数组来替代;

2、字符串一定是一个char的数组,但char的数组未必是字符串;

3、数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。

#include int main(){  char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' }; //普通字符数组  printf("c1 = %s\n", c1); //乱码,因为没有’\0’结束符  //以‘\0’(‘\0’就是数字0)结尾的字符数组是字符串  char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0'};   printf("c2 = %s\n", c2);  //字符串处理以‘\0’(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出  char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};  printf("c3 = %s\n", c3);  return 0;}

 字符串的初始化操作

#include // C语言没有字符串类型,通过字符数组模拟// C语言字符串,以字符‘\0’, 数字0int main(){  //不指定长度, 没有0结束符,有多少个元素就有多长  char buf[] = { 'a', 'b', 'c' };  printf("buf = %s\n", buf);  //乱码  //指定长度,后面没有赋值的元素,自动补0  char buf2[100] = { 'a', 'b', 'c' };char buf[1000]={“hello”};  printf("buf2 = %s\n", buf2);  //所有元素赋值为0  char buf3[100] = { 0 };  //char buf4[2] = { '1', '2', '3' };//数组越界  char buf5[50] = { '1', 'a', 'b', '0', '7' };  printf("buf5 = %s\n", buf5);  char buf6[50] = { '1', 'a', 'b', 0, '7' };  printf("buf6 = %s\n", buf6);  char buf7[50] = { '1', 'a', 'b', '\0', '7' };  printf("buf7 = %s\n", buf7);  //使用字符串初始化,编译器自动在后面补0,常用  char buf8[] = "agjdslgjlsdjg";  //'\0'后面最好不要连着数字,有可能几个数字连起来刚好是一个转义字符  //'\ddd'八进制字义字符,'\xdd'十六进制转移字符  // \012相当于\n  char str[] = "\012abc";  printf("str == %s\n", str);  return 0;}

                                字符串的输入输出

由于字符串采用了'\0'标志,字符串的输入输出将变得简单方便。

#include int main(){  char str[100];     printf("input string1 : \n");  scanf("%s", str);//scanf(“%s”,str)默认以空格分隔  printf("output:%s\n", str);  return 0;}

                            gets()函数

#include char *gets(char *s);功能:从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止。参数:  s:字符串首地址返回值:  成功:读入的字符串  失败:NULLchar str[100];  printf("请输入str: ");  gets(str);  printf("str = %s\n", str);

gets(str)与scanf(“%s”,str)的区别:

l  gets(str)允许输入的字符串含有空格

l  scanf(“%s”,str)不允许含有空格

注意:由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。

                            fgets()函数

#include char *fgets(char *s, int size, FILE *stream);功能:从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 '\0' 作为字符串结束。参数:  s:字符串  size:指定最大读取字符串的长度(size - 1)  stream:文件指针,如果读键盘输入的字符串,固定写为stdin返回值:  成功:成功读取的字符串  读到文件尾或出错:NULL  char str[100];  printf("请输入str: ");  fgets(str, sizeof(str), stdin);  printf("str = \"%s\"\n", str);

fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的“\n”,但通过fgets结尾多了“\n”。fgets()函数是安全的,不存在缓冲区溢出的问题。

 puts()函数

#include int puts(const char *s);功能:标准设备输出s字符串,在输出完成后自动输出一个'\n'。参数:  s:字符串首地址返回值:  成功:非负数  失败:-1#include int main(){  printf("hello world");  puts("hello world");  return 0;}

 fputs()函数

#include int fputs(const char * str, FILE * stream);功能:将str所指定的字符串写入到stream指定的文件中, 字符串结束符 '\0'  不写入文件。参数:  str:字符串  stream:文件指针,如果把字符串输出到屏幕,固定写为stdout返回值:  成功:0  失败:-1  printf("hello world");  puts("hello world");  fputs("hello world", stdout);

fputs()是puts()的文件操作版本,但fputs()不会自动输出一个'\n'。

c++ scanf输入字符串_在C语言中,你真的搞清楚字符串了吗?相关推荐

  1. scanf 输入十六进制_使用C语言中的scanf()在字符变量中输入十进制,八进制和十六进制值...

    scanf 输入十六进制 Here, we will declare an unsigned char variable and input different format's value like ...

  2. c语言scanf输入 a啥意思,c语言中的scanf(%s,a)的是什么意思?

    &是取地址,scanf读取变量的时候,参数需要的是变量的实际内存地址. 与printf函数一专样,都被声明在属头文件stdio.h里,因此在使用scanf函数时要加上#include . 在有 ...

  3. scanf 输入十六进制_在C语言中使用scanf()输入一个十六进制值

    scanf 输入十六进制 Here, we have to declare an unsigned int variable and input a value in hexadecimal form ...

  4. c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注回答:#includestdio.h void swap(int * ...

  5. 下列表达式在python中是非法的_在Python语言中,以下非法的表达式是( )

    [单选题]6.9 下列各式避雷器放电电压的说法错误的是(     ) [单选题]下列哪种数据类型是整型() [判断题]修剪的快捷命令键是rt [单选题]已知x,y=" ",-1:则 ...

  6. c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf

    C语语言言中中"不不受受限限制制"的的字字符符串串函函数数总总结结 "不不受受限限制制的的"字字符符串串函函数数 按 <C和指针>中所说,那些常用的 ...

  7. python 求子字符串_(6)KMP算法(求子串的位置)______字符串的匹配

    问题: 已知字符串 B 是字符串 A 的一个子串,问字符串 B 在字符串 A 的第一次出现位置. 暴力方法:从 A 字符串 的每个位置开始对字符串 B 进行匹配. 这种方法根据数据的不同 复杂度不同最 ...

  8. c语言中extern关键字_了解C语言中的extern关键字

    c语言中extern关键字 In this article, we'll take a look at understanding the extern keyword in C. 在本文中,我们将了 ...

  9. malloc 初始化_在C语言中,请一定记得初始化局部变量!

    C语言中,未初始化的局部变量到底是多少? 答案往往是: 与编译器有关. 可能但不保证初始化为0. 未确定. 总之,全部都是些一本正经的形而上答案,这很令人讨厌. 但凡一些人给你滔滔不绝地扯编译器,C库 ...

最新文章

  1. 1003. 二哥养细菌—java
  2. 「译」 .NET 5 新增的Http, Sockets, DNS 和 TLS 遥测
  3. solverstate的使用
  4. 【渝粤题库】陕西师范大学700007 生态学
  5. 斐波那契数列,递归与非递归c语言实现
  6. 1. K近邻算法(KNN)
  7. python的matplotlib的函数_在Python中使用matplotlib绘制条件函数
  8. 2月份全球制造业PMI为55.6% 已连续8个月保持在50%以上
  9. D3 二次方曲线与切线
  10. MATLAB编程与应用系列-第3章 矩阵运算(4)
  11. PyTorch学习—23.PyTorch的基本使用
  12. 大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
  13. thinkphp3.2.3 bug集锦
  14. DLL Injection and Hooking
  15. liteIDE搭建Go Golang 开发环境图文详解
  16. 64位 atol c linux_Linux下c++中的atoi、atol、atoll、atof函数调用实例
  17. 图像处理中二次曲线拟合
  18. 第二十四天:2019年第九届MathorCup高校数学建模挑战赛A题
  19. 四大微信小程序测评结果出炉
  20. chai断言库学习3-Core Plugin Concepts

热门文章

  1. 五种最易被老板开除的人
  2. 卷积神经网络初步认知
  3. linux fedora35安装、登录postgresql-14数据库命令整理
  4. SparkSubmit源码解读记录
  5. k8s使用port-forward访问集群中的应用程序(只能在执行命令的机器上开放端口)
  6. 代码示例:使用redis计数来控制单位时间内对某接口的访问量
  7. Spring AOP编程-传统基于aspectJ切点AOP开发
  8. 永冻土层matlab图片,俄永冻土层现冰河期洞熊,站立可达3.5米,身体各器官保存完好...
  9. 通过IDEA查看某个类的继承关系
  10. Qt工程文件Pro中判断Qt版本号