用来存放字符的数组称为字符数组,例如:

  1. char a[10]; //一维字符数组
  2. char b[5][10]; //二维字符数组
  3. char c[20]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; // 给部分数组元素赋值
  4. char d[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' }; //对全体元素赋值时可以省去长度

字符数组实际上是一系列字符的集合,也就是字符串(String)。在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。

C语言规定,可以将字符串直接赋值给字符数组,例如:

  1. char str[30] = {"c.biancheng.net"};
  2. char str[30] = "c.biancheng.net"; //这种形式更加简洁,实际开发中常用

数组第0个元素为 'c',第1个元素为 '.',第2个元素为 'b',后面的元素以此类推。也可以不指定数组长度,例如:

  1. char str[] = {"c.biancheng.net"};
  2. char str[] = "c.biancheng.net"; //这种形式更加简洁,实际开发中常用

在C语言中,字符串总是以'\0'作为串的结束符。上面的两个字符串,编译器已经在末尾自动添加了'\0'

'\0'是ASCII码表中的第0个字符,用NUL表示,称为空字符。该字符既不能显示,也不是控制字符,输出该字符不会有任何效果,它在C语言中仅作为字符串的结束标志。

puts 和 printf 在输出字符串时会逐个扫描字符,直到遇见 '\0' 才结束输出。请看下面的例子:

  1. #include <stdio.h>
  2. int main(){
  3. int i;
  4. char str1[30] = "http://c.biancheng.net";
  5. char str2[] = "C Language";
  6. char str3[30] = "You are a good\0 boy!";
  7. printf("str1: %s\n", str1);
  8. printf("str2: %s\n", str2);
  9. printf("str3: %s\n", str3);
  10. return 0;
  11. }

运行结果:
str1: http://c.biancheng.net
str2: C Language
str3: You are a good

str1 和 str2 很好理解,编译器会在字符串最后自动添加 '\0',并且数组足够大,所以会输出整个字符串。对于 str3,由于字符串中间存在 '\0',printf() 扫描到这里就认为字符串结束了,所以不会输出后面的内容。

需要注意的是,用字符串给字符数组赋值时由于要添加结束符 '\0',数组的长度要比字符串的长度(字符串长度不包括 '\0')大1。例如:

char str[] = "C program";

该数组在内存中的实际存放情况为:

字符串长度为 9,数组长度为 10。

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

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

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

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

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

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

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

  4. C语言字符数组与字符串

    研究几个案例: 输出图案: #include <stdio.h> void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...

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

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

  6. C语言中字符数组和字符串指针分析

    这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...

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

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

  8. C语言基础复习:字符,字符数组,字符串,字符指针

    1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...

  9. C语言中整形数组、字符数组、字符串的区别

    一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...

随机推荐

  1. 一招破解混淆后的JavaScript代码

    http://www.cnblogs.com/zjyuan/archive/2011/12/14/2287647.html JavaScript不是很给力,想怎么破解就怎么破解!此文章教你的不仅仅是破 ...

  2. ubuntu 命令行下查看网页 w3m

    w3m localhost/index.php

  3. ubuntu sudo 和su的区别

    ubuntu用户管理 sudo意思就是super-user do,让当前用户暂时以管理员的身份root来执行这条命令. su是用来改变当前用户的,su root,就是将当前用户切换为root,用了su ...

  4. Eclipse使用教程之精华篇

    插件安装方法 插件大概有三种安装方法: 第一种:知道在线安装地址.Eclipse→Help→Install New Software...→地址栏(Work with)中输入安装地址→勾选要安装的插件 ...

  5. Android编程的写法规范

    一.获取View对象 1.private EditText m_txtSmsPhone = null;//定义一个EditText控件的调用对象 m_表示为View对象 txt表示文本框 2.在pro ...

  6. EF性能

    批量操作时,加上这句:Context.Configuration.AutoDetectChangesEnabled = false; 主要是取消跟踪,缩短对象添加到上下文的时间(非执行SQL的时间)

  7. Python partition() 方法

    描述 Python partition() 方法用来根据指定的分隔符将字符串进行分割. 如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符前面的子字符串,第二个为分隔符本身,第三个为分隔 ...

  8. 微软收购跨平台移动应用开发商Xamarin

    微软今天宣布收购移动应用跨平台开发商 Xamarin.收购金额未知.Xamarin 提供了通过 C# 开发 iOS.Android 和 Windows 原生移动应用的工具,以及云端应用測试平台 – 全 ...

  9. android.animation(3) - ValueAnimator-ofObject(TypeEvaluator evaluator, Object... values)

    一.ofObject()概述 前面我们讲了ofInt()和ofFloat()来定义动画,但ofInt()只能传入Integer类型的值,而ofFloat()则只能传入Float类型的值.那如果我们需要 ...

  10. Selenium - Webdriver API /ActionChains API

    一.控制浏览器 1.1 控制浏览器窗口大小 # 获取当前浏览器的大小  driver.get_window_size() # 通过像素设置浏览器的大小  driver.set_window_size( ...