字符串儿与字符数组

字符数组的定义:

  1. Char buffer[];

字符数组初始化:

  1. Char buffer1[]="hello world";

利用scanf输入一个字符串儿

代码:

  1. #include <iostream>
  2.  
  3. int main() {
  4. //字符数组定义,对于C语言就是最后一个元素为\0的char数组。
  5. char buffer[];
  6. //字符数组初始化
  7. char buffer1[]="hello world";
  8.  
  9. printf("请输入一个字符串儿:\n");
  10. scanf("%s",buffer);
  11. printf("输入的字符串是:\n");
  12. printf(buffer);
  13.  
  14. return ;
  15. }

运行结果:

/*这里有一个小插曲:

Int a = 0;

Scanf("请输入整形a的值%d",&a);

这个 就比较坑,要输入一个,比如我们要给a赋一个5.

那么我们在控制台就要输入:

请输入整形a的值5

然后 printf("%d",a);就可以了。

*/

字符串儿处理函数:

gets()从外设读取字符串儿放到对应的字符串儿数组中。但是存在 内存泄露的问题,如果在第二函数里面输入过多的内容,就会导致缓冲区溢出。

溢出示意图:

【演示图与效果图中w的数量不一致】

溢出效果图:

演示代码:

  1. #include <iostream>
  2.  
  3. int main() {
  4.  
  5. char charArray1[];
  6. char charArray2[];
  7.  
  8. gets(charArray1);
  9. printf(charArray1);
  10. printf(charArray2);
  11. gets(charArray2);
  12. printf(charArray1);
  13. printf(charArray2);
  14.  
  15. return ;
  16. }

/*

也未必总是会报错:

这次就没出异常。然后修改了一下代码。

*/

这样系统就会很不稳定。所以就诞生了:fgets() 函数。

示例用法:

  1. void fgetsFunction(void){
  2.  
  3. char charArray[];
  4. fgets(charArray,sizeof(charArray),stdin);
  5. printf(charArray);
  6.  
  7. }

运行结果:

尝试冲突:

printf() 与   puts() 的输出区别。

示例代码:

  1. void putsFunction(void){
  2. char charArray[]="hello world";
  3. printf(charArray);
  4. puts(charArray);
  5. printf(charArray);
  6. }

运行结果:

然后是fputs(),文件输出的意思:

查阅了一下文档:

【function

http://www.cplusplus.com/reference/cstdio/fputs/

<cstdio>

fputs

int fputs ( const char * str, FILE * stream );

Write string to stream

Writes the C string pointed by str to the stream.
The function begins copying from the address specified (str) until it reaches the terminating null character ('\0'). This terminating null-character is not copied to the stream.
Notice that fputs not only differs from puts in that the destination stream can be specified, but also fputs does not write additional characters, while puts appends a newline character at the end automatically.

简单翻译:

写一个字符串到流

写一个C的字符串到流中。

这个函数会复制 从str起始地址到str\0的位置的内容。终止符号\0并不会被复制到流中。

Fputs与 puts函数的区别在两个地方:是否会在文件结尾添加新的换行标记。文档里面这样写,说明在 windows里面是 \n\r 在linux 里面是 \n.另外一个区别是:fputs的目标流是被指定的。【毕竟后面带了一个参数,用以指定。这也就是为什么他们是为了文件操作而生成的函数,因为要指定对应的流对象。】

/**

为了看懂另外的区别,就不得不看下面的例程:

Example

123456789101112131415 /* fputs example */

  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5. FILE * pFile;//声明文件
  6. char sentence [];//声明字符串数组
  7.  
  8. printf ("Enter sentence to append: ");//提示
  9. fgets (sentence,,stdin);//防止内存溢出的得到一个字符串
  10. pFile = fopen ("mylog.txt","a");//懵逼
  11. fputs (sentence,pFile);
  12. fclose (pFile);
  13. return ;
  14. }

然后 就要看 fopen这个 【http://www.cplusplus.com/reference/cstdio/fopen/】

然后找到这个参数a

别的应该都没啥用,那就应该是 指打开一个文件了。

好吧,不能打眼瞅。。。为了输出而打开一个文件,在文件的末尾,输出操作通常是在文件的末尾写数据,来扩展这个文件。存储操作(fseek,fsetpos,rewind)会被忽略。如果这个文件不存在的话,就创建它。

这段示例代码的运行结果:

文件目录下有一个

双击打开,是执行了三次的运行结果。

*/

其实 看到 fgets() 和 fputs() 也就应该明白是怎么回事儿了,因为 带一个 f也就应该想到是跟文件操作相关的,而他们都是防止发生,内存溢出的,在指定参数的时候就严格限定了。【看上面那行红字】

C语言字符串与字符数组的更多相关文章

  1. (C/C++学习)15.C语言字符串和字符数组

    说明:在C语言中字符串和字符数组有很多相似之处,却又有着一些不同.本文将针对其区别与联系,进行分析总结. 一.字符串 1.在C语言中,字符串是由双引号括起来的任意字符序列,如:"china& ...

  2. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  3. 字符串,字符数组(C/C++)

    这个地方困惑我好久了,废话不多说 char c1[]="12345"; char *c2="12345"; string c3="12345" ...

  4. 【C#】字符串与字符数组

    字符串与字符数组的相互转换. 字符串转换成字符数组: string ss="abcdefg"; char[] cc=ss.ToCharArray();     字符数组转换成字符串 ...

  5. 字符类型char、字符串与字符数组、字符数组与数据数组区别

    字符类型是以ASCII码值运算的:小写字母比相应的大写字母大32,其中A=65,a=97 Esc键 27(十进制).'\x1B'(十六进制).'\33'(八进制) 转义字符:\0 空字符     AS ...

  6. JavaScript字符串和字符数组

    字符串 字符串与字符数组: 字符串:var a = 'ddd'; 字符数组:var arr = 'f','o','o' 相同点: 1.都是类数组 2.都有length属性 3.都有indexOf()和 ...

  7. java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" ...

  8. Day_09【常用API】扩展案例4_将字符串变为字符数组,并将大写字母改为小写,首尾内容不同互换,并将索引为偶数的元素替换

    分析以下需求,并用代码实现 1.键盘录入一个字符串 2.将该字符串变成字符数组(不能使用toCharArray()方法) 3.将字符数组中的所有大写字母变成小写字母(不能使用toLowerCase() ...

  9. [日常] C语言中的字符数组和字符串

    c语言字符数组和字符串:1.存放字符的数组称为字符数组 char str[]2.'\0'也被称为字符串结束标志3.由" "包围的字符串会自动在末尾添加'\0'4.逐个字符地给数组赋 ...

随机推荐

  1. u-boot移植为tiny6410步骤

    1. 修改顶层Makefile文件 2. 修改arch/arm/cpu/arm1176/s3c64xx/cpu_init.S 3. 修改arch/arm/cpu/arm1176/s3c64xx/Mak ...

  2. PPI_network&calc_ppi

    # -*- coding: utf-8 -*- # __author__ = 'JieYao' from biocluster.agent import Agent from biocluster.t ...

  3. JDBC的批量批量插入

    本文部分转载于:http://blog.itpub.net/29254281/viewspace-1151785/ http://www.cnblogs.com/chenjianjx/archive/ ...

  4. 【数论-数位统计】UVa 11076 - Add Again

    Add AgainInput: Standard Input Output: Standard Output Summation of sequence of integers is always a ...

  5. EasyUI的datagrid获取所有正在编辑状态的行的行编号

    今天项目需要用了下EasyUI的datagrid的行编辑功能,跟着API来,只要是将各种状态时的处理逻辑弄好,还是蛮不错的. 开发过程中,遇到了个问题,在编辑完成后我需要获取datagrid所有处于编 ...

  6. secureFX中出现中文乱码修改方法

    1. 找到SecureFX配置文件夹(选项--全局选项,常规下的配置文件夹),比如:D:\Program files\SecureCRT\DATA:2. 在配置文件夹下的Sessions子目录中,找到 ...

  7. win7如何建立无线局域网

    将win7电脑变身WiFi热点,让手机.笔记本共享上网用win7建立无线局域网,可以共享上网可以局域网游戏.开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑 ...

  8. php中preg_match用户名正则实例

    例子,字母.数字和汉字  代码如下 复制代码 if(preg_match("/[ '.,:;*?~`!@#$%^&+=)(<>{}]|]|[|/|\|"||/& ...

  9. Excel数据生成Sql语句的方法

    选中想要生成的列,套用表格格式,选中表包含标题的选项确定,然后在最右边的一列第二行处,点击函数功能,选择CONCATENATE,在文本里输入想要的结构即可  代码如下 复制代码 ,=CONCATENA ...

  10. JS 截取字符串函数

    一.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str=”jpg|bmp|gif|ico|png”; arr=theString.split(”|”); //a ...