赋值篇:


Part1      错误引例*2:

     char c6[];//WRONG
c6="HELLO";//WRONG char c7[];//WRONG
c7[]='H';//WRONG
c7[]='E';//WRONG
c7[]='L';//WRONG
c7[]='L';//WRONG
c7[]='O';//WRONG
 
1.不允许声明之后才对整个字符数组进行赋值,比如c6
2.除非声明时顺便赋值了,否则不允许不声明数组长度,比如c7
 

Part2:
     char c1[]={'H','E','L','L','O'};
char c2[]={'H','E','L','L','O','\0'};
char c3[]={'H','E','L','L','O','\0'};
printf("c1:%s sizeofc1:%d\n",c1,sizeof(c1));
printf("c2:%s sizeofc2:%d\n",c2,sizeof(c2));
printf("c3:%s sizeofc3:%d\n",c3,sizeof(c3));

1.printf %s时,每次地址+1,直到找到'\n'为止,所以c1会乱码


Part3:

     char *c4="HELLO";
char *c5="HELLO\0";
char *c6;
c6="HELLO";
printf("c4:%s sizeofc4:%d\n",c4,sizeof(c4));
printf("c5:%s sizeofc5:%d\n",c5,sizeof(c5));
printf("c6:%s sizeofc6:%d\n\n",c6,sizeof(c6));

1.注意字符指针可以声明后赋值,与第一个c6对比
2.注意这里打印的size,因为打印的是字符串数组的首字地址size,所以size都是一样的


Part4:

     char c7[]="HELLO";
char c8[]="HELLO\0";

1.注意用字符串常量赋值会自动补'\0'
2.注意就算你自己加了'\0'还是会给你自动加'\0'
 

Part5:
     char c9[];
c9[]='H'; c9[]='E';
c9[]='L'; c9[]='L'; c9[]='O'; char c10[];
c10[]='H'; c10[]='E';
c10[]='L'; c10[]='L';
c10[]='O'; c10[]='\0';
printf("c7:%s sizeofc7:%d\n\n",c7,sizeof(c7));
printf("c9:%s sizeofc9:%d\n\n",c9,sizeof(c9));
printf("c10:%s sizeofc10:%d\n\n",c10,sizeof(c10));

1.注意c9,因为printf %s时,每次地址+1,直到找到'\n'为止,所以会把c10也一起打印了


Part6      scanf输入:

    char a[];
scanf("%s",a);
printf("%s",a);

假如像这样普通输入的话,遇到空格、换行都会使字符串赋值中断,一种解决方法是看有多少段,逐段赋值然后连到一起。另一种方法是gets()

     char a[];
gets(a);
puts(a);

1.gets()可以识别空格,直到换行符出现,舍弃换行符,并自动补'\0'
2.puts()将字符串输出后会自动换行
3. getchar()、putchar()则是可以存储空格和换行的字符输入输出函数

函数篇:


Part1      strcpy(char * dest,char *sr):

     char c11[];
strcpy(c11,"HELLO\0");
printf("c11:%s sizeofc11:%d\n\n",c11,sizeof(c11));
 
 
功能:复制
1.dest只能是数组名,且已经声明过长度,sr可以实字符串常量或数组名且最末尾必须是'\n'
2.注意c11不可以不声明长度就开始复制
3.假如要用到指针,也必须使指针已经指向某个数组才能使用,比如这样
     char *c11;
char temp[];
c11=temp;
strcpy(c11,"HELLO\0");
printf("c11:%s sizeofc11:%d\n\n",c11,sizeof(c11));
 

Part2      strcat(char *dest,char *sr):

     char c7[]="HELLO";
char c8[]="HELLO\0";
printf("c8:%s sizeofc8:%d\n",c8,sizeof(c8));
printf("c8+c7:%s\n",strcat(c8,c7));
printf("c8:%s sizeofc8:%d\n\n",c8,sizeof(c8));

功能:把sr的内容复制到dest结尾处(覆盖'\0')

1.c8里有2个'\n',cat时扫描到第一个'\n'即开始复制
2.strcpy和strcat都是以'\0'作为结束标识
 

Part3      strlen(char *str1):

     char c3[]={'H','E','L','L','O'};
printf("strlen(c3):%d sizeof(c3):%d",strlen(c3),sizeof(c3));

功能:求实际长度

C语言字符数组回顾的更多相关文章

  1. C语言 字符数组与字符指针比较

    C语言 字符数组与字符指针比较 #include<stdio.h> /* 字符数组会在定以后预先分配内存空间字符串是常量所以会直接把字符串拷贝到数组中, 因为数组地址不同,所以不相等· 字 ...

  2. C语言字符数组超细讲解

    看到标题,有不少朋友会想:字符数组不也是数组吗?为什么要单独拿出来讲哩?莫非它是朵奇葩? 哈哈,确实,一起来认识一下这朵数组界的奇葩吧! 一.字符数组的定义.引用.初始化 大家好!我是字符数组,看我的 ...

  3. [c语言]字符数组、字符串定义

    C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...

  4. 【转】C语言 字符数组与字符串

    原文:http://blog.csdn.net/metasearch/article/details/2856097 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串.总结起来 ...

  5. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  6. c语言字符数组和指针的经典用法

    1.字符数组 许多情况下,对字符串的处理使用字符数组会更加方便,比如: 我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好. eg:给定字符串(ASCII码0-255)数组 ...

  7. C 语言字符数组的定义与初始化

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

  8. C语言字符数组和字符串

    用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ' ', 'p', 'r', 'o' ...

  9. c语言字符数组的初始化问题

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

随机推荐

  1. 第15章 时间常数字符串比较 - IdentityModel 中文文档(v1.0.0)

    在比较安全上下文中的字符串(例如比较键)时,应尽量避免泄漏时序信息. 该TimeConstantComparer类可以帮助: var isEqual = TimeConstantComparer.Is ...

  2. 《Jave并发编程的艺术》学习笔记(1-2章)

    Jave并发的艺术 并发编程的挑战 上下文切换 CPU通过时间片分配算法来循环执行任务,当前时间片执行完之后会切换到下一个任务.但是,切换会保存上一个任务的状态,一遍下次切换回这个任务时,可以再次加载 ...

  3. Android路由框架-ARouter详解

    文章大纲 一.页面路由基本介绍1.什么是页面路由2.为什么要使用页面路由二.页面路由框架ARouter介绍1.常用功能介绍2.常见应用场景三.源码下载四.参考文章   一.页面路由基本介绍 1.什么是 ...

  4. JVM之垃圾收集器

    前一篇讲了垃圾收集算法--JVM之GC算法.垃圾收集算法——标记-清除算法.复制算法.标记-整理算法.分代收集算法,如果把它看作是方法论,那么下面说的就应该是内存回收的具体实现. 先看一下JVM中有哪 ...

  5. [转]微信小程序实现图片上传功能

    本文转自:http://blog.csdn.net/feter1992/article/details/77877659 前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何 ...

  6. [原创] 分享我们自己搭建的微信小程序开发框架——wframe及设计思想详解

    wframe不是控件库,也不是UI库,她是一个微信小程序面向对象编程框架,代码只有几百行.她的主要功能是规范小程序项目的文件结构.规范应用程序初始化.规范页面加载及授权管理的框架,当然,wframe也 ...

  7. selenium+谷歌无头浏览器爬取网易新闻国内板块

    网页分析 首先来看下要爬取的网站的页面 查看网页源代码:你会发现它是由js动态加载显示的 所以采用selenium+谷歌无头浏览器来爬取它 1 加载网站,并拖动到底,发现其还有个加载更多 2 模拟点击 ...

  8. 消除点击连接或者按钮或者执行onclick事件时出现的边框

    css中添加 *:not(input) { font-family: sans-serif; font-size-adjust: none; -webkit-user-select: none; -w ...

  9. Android新版本特性以及注意事项

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 了解新版本的特性还是很有必要的,为什么这么讲呢?因为可以从应用市场对发布应用的目标API版本(targetSdkVersion值)的 ...

  10. 微信公众号开发C#系列-1、微信公众平台注册

    微信公众号简介 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发主要指的是公众号的账号类型,公众号的账号类型分为订阅号.服务号.企 ...