初始化

char str[10]="Hello";
char str[10]={'H','e','l','l','o','\0'};
char str[10]={'H'};
char str[10]={0}; char str[10]="Hello, world.\n"; char str[]="Hello, world.\n";

第一种情况:初始化数据小于数组长度

如前面两个初始化的例子,这两个例子的效果一样,前五个字符为Hello,剩余的用'\0'填充

第三行与第四行,都只指定了第一个字符,剩余的全部用'\0'填充。第四个例子相当将整个数组初始化为'\0'

第二种情况:初始化数据等于或超过数据长度

这种情况下,超出的部分将被丢弃,所以最五个例子的最后一个字符为'r'.

此时使用一些字符串函数时要特别注意,因为该数组不含有'\0',会造成不可预期的结果

第三种情况:不指定数组长度

这种情况下,数组部分如果不含有明确指定的'\0',那么编译时会被自动添加一个'\0';

在数组不含有明确的'\0'时,sizeof=strlen+1

一些字符串函数

#incldue <string.h>

void *memset(void *s,int c,size_t n);

size_t strlen(const char *s);

void *memcpy(void *dest,const void *src,size_t n);
void *memmove(void *dest,const void *src,size_t n); char *strcat(char *dest,const char *src);
char *strncat(char *desk,const char *src,size_t n); //大小写敏感
int memcmp(const void *s1,const void *s2,size_t n);
int strcmp(const char *s1,const char *s2);
int strncmp(const char *s1,const char *s2,size_t n); //大小写不敏感
int strcasecmp(const char *s1,const char *s2);
int strncasecmp(const char *s1,const char *s2,size_t n); //正反向查询
char *strchr(const char *s,int c);
char *strrchr(const char *s,int c);
char *strstr(const char *haystack,const char *needle); //分割字符串
char *strtok(char *str,const char *delim);
char *strtok_r(char *str,const char *delim,char **saveptr);

char数组初始化的更多相关文章

  1. 通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail

    面试高频题:单链表的逆置操作/链表逆序相关文章 点击打开 void init_node(node *tail,char *init_array) 这样声明函数是不正确的,函数的原意是通过数组初始化链表 ...

  2. 数组初始化(c, c++, gcc, g++)

    这是很基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定曾经了解过,但现在,我不敢确定,由此可见纪录的重要性,这世界没有什么捷径,找对方向,然后不停重复.所以从今天开始,我会比较详细的纪录这 ...

  3. c语言数组初始化问题

    2147483648字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10 ...

  4. c 有意思的数组初始化

    c 有意思的数组初始化 #include <stdio.h> int main() { int i = 0; char a[1024]; char a0[10] = {}; char a1 ...

  5. 个人理解的int数组和char数组

    char数组中不论是一维还是二维的,在程序执行时每一块的分离依据都是以提供的起始地址到'\0'为一个处理的字符串.所以关于char[]的函数都是只提供相应起始地址作为形参就可以. char[]互相交换 ...

  6. C++数组初始化方法

    定义: ]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指 ...

  7. C++ new动态数组初始化

    strlen函数是不包括‘\0’的长度的,sizeof计算的结果才包括'\0'的长度: C++ new动态数组初始化void testnew( const char* str ) { if (!str ...

  8. C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理

    C语言中,数组初始化的方式主要有三种: 1.声明时,使用 {0} 初始化: 2.使用memset: 3.用for循环赋值. 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: #define ...

  9. C++ char数组和string类简单使用总结

    使用char数组,进行字符串的操作,是c风格的操作方式. string是C++的风格,感觉string本质上就是一个vector<char> 以下代码详细展示了字符串的常见操作 #incl ...

随机推荐

  1. Spring基础19——Spring中几种注解的区别

    1.@Autowired:注解是用来装配bean的,需要注入的bean必须是已经被IOC容器创建的bean,这个注解是利用类型装配的,如果容器中出现一个以上要装配的类或其子类就需要用@Qualifie ...

  2. PyMySQL和MySQLdb的区别

      网上很多关于Scrapy存入MySQL的教程,都会发现又这么一个包的引入: import MySQLdb import MySQLdb.cursors 聪明的你或许已经算到,需要安装MySQLdb ...

  3. 树状数组求LIS模板

    如果数组元素较大,需要离散化. #include <iostream> #include <cstdio> #include <cstring> #include ...

  4. 八、ARM 汇编程序格式和程序控制

    8.1 汇编程序格式 源程序中的语句可以分为两种类型:指令性语句.指示性语句 指示性语句就是一些伪操作,在 MDK 编译环境下的伪操作有下面几种: 符号定义伪操作 数据定义伪操作 汇编控制伪操作 其他 ...

  5. spring bean的生命周期与作用域

    bean的作用域 singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象. prototype:原型模式,每次通过Spri ...

  6. NTC电阻Rt与温度T关系

    NTC电阻Rt与温度T公式如下: Rt=10000*exp(3950*(1/(273.15+T)-1/(273.15+25))). 例:0摄氏度时,电阻为33620.6037214357 欧姆 Rt= ...

  7. 扩展微信小程序 Page 构造函数,修改生命周期函数

    不BB,直接正题 一. 将公共方法绑定到Page上 单个绑定 const oldPage = Page Page = function(app) { // 注意公共函数的名字不要重复,否则覆盖 app ...

  8. Shell-04

    grep程序 Linux下文本处理三剑客-----grep sed awk sed:文本行编辑器(流编辑器)        awk:报告生成器(文本输出格式化)         grep:文本行过滤工 ...

  9. 对SQL 优化,提升性能!

    对SQL 进行优化能够有效提高SQL 语句的执行效率,降低系统资源开销,是开发者提高后端系统处理能力的首选方案. 新产品上线后,随着运营推广活动的开始,业务进入快速增长期,数据库作为后端系统唯一或者主 ...

  10. SpringBoot整合MongoDb(二)

    构建项目及配置 pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</ ...