字符数组和字符串介绍

字符串:以0结束的字符数组。

注意这里的0是数字0而不是字符0,其ASCII码值为48

char s[5] = {‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘};//字符数组

char s[5] = {‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘0‘};//字符数组

char s[5] = {‘A‘, ‘B‘, ‘C‘, ‘D‘, 0};//字符串

char s[5] = "ABCD";   //字符串,与上一行完全等价

字符串常量是""所括起来的,其最后一定存在一个看不见的\0作为结束标志

对于字符串的处理,必须遇\0就止

char s[6] = "abcdef";//语法错误,存储长度超过数组的长度

char s[] = "abcd0123\0XYZ\0\0";

printf("%d %d\n", sizeof(s), strlen(s));

上述的输出结果:sizeof(s)是15,strlen(s)是8

由上可知,字符串遇到\0就截止了,其后长度未被计算进去

总结:

sizeof()的用法

sizeof()是一个运算符,不是一个函数,它有以下三种用法:

  1. sizeof(数据类型名称),测的结果是数据类型所占的字节数

2.sizeof(变量名称或者数组名称),测得结果是变量或者数组所申请的空间

char a;  sizeof(a)==>1

short a;  sizeof(a)==>2

int a[20]; sizeof(a)==>80

3.sizeof(字符串名称),测得结果是字符串的长度+1(所加的一字节就是结束表示\0)

strlen()的用法:

strlen()是专门测量字符串长度的函数,使用前需要在函数前加上

#include<string.h>这个头函数,它测得结果不包括\0这个字符串长度

字符串程序设计实例:

从键盘输入一串字符,要求逐字符逐行输出,例如:输入abcd,则输出为

a

b

c

d

程序:

char shit[80];

int i;

scanf("%s", shit);//%s使用时,对应为数组的数组名字,不用加取地址符号&

//这种做法输入时候不能有空格,遇到空格即输入结束

for(i = 0; shit[i];i++)//数组的最后一个字符为0

printf("%c\n", shit[i]);

时间: 2024-10-12 00:12:10

字符数组和字符串介绍的相关文章

字符数组和字符串指针的定义

今天在看书上的一段代码的时候发现有一段代码有问题,对于那段代码的错误进行一下解释. 并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释. 书上的错误代码大概如下: #include<stdio.h> void copy(char *x,char *y) { for(;*y!='\0';x++,y++) *x=*y; *x='\0'; printf("%s\n",a); } int main() { char *a="Hello!"; char

关注C++细节——字面值初始化字符数组及字符串拷贝注意

char carr[] = "author:CSDN-iaccepted"; 此时,carr数组中元素的个数为21,最后一个位置用来存放空字符'\0'. 所以如果写成carr[21] = "author:CSDN-iaccepted";就是错误的. int clen = strlen(carr); int size = sizeof(carr); 这时候得到的clen = 21,size= 22.这就是因为strlen统计串中字符的个数,不计算最后的空字符,但是si

C++基础之字符数组和字符串

无意中发现了一个非常有意思的技术类型小品文系列,通过大牛指导菜鸟的方式,解说讲C++知识,有的非常基础却是开发中easy忽略的地方. [Elminster的专栏] http://blog.csdn.net/Elminster/article/contents [Solmyr 的小品文系列之中的一个:字符串放在哪里? ] http://blog.csdn.net/elminster/article/details/9730 转帖至此,给出链接,原文就不贴了,总结并扩展一下方便以后回想. 字符数组(

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

转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.

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

这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序: #include <stdio.h> int main(int argc, char *argv[]){ char day[15] = "abcdefghijklmn";  char* strTmp = "opq

关于“C语言中的字符数组和字符串”一些需要注意的基础点

在C语言中,没有类似Java的String类对字符串的处理,字符串的包装可以采用字符数组. 先看字符数组: #include<stdio.h> void main() { char array[] = {'a','b','c'}; int str = sizeof(array)/sizeof(char); printf("%d",str); } 此时的输出结果为:3,即字符数组的长度为3. 下面我们用字符串初始化字符数组,代码如下. #include<stdio.h&

Base64 报错 的解决办法 (Base-64 字符数组或字符串的长度无效。, 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。)

Base64 报错 的解决办法, 报错如下:1. FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ]    System.Convert.FromBase64Str

到底使用字符数组还是字符串常量

在c语言中有两种表示字符串的方法,一种是字符数组,一种是字符串常量 在编程过程中如果只涉及到对字符串的读取,那么字符数组和字符串常量都能够满足要求:如果有写入(修改)操作,那么只能使用字符数组,不能使用字符串常量. 字符串数组与字符串常量之间的区别: 最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区.全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限.下面的例子演示了如何

C语言学习笔记:19_数组-字符数组与字符串(常用字符串函数)

/* * 19_数组-字符数组与字符串.c * * Created on: 2015年7月7日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> #include <string.h> /** *一:字符数组:就是存放字符的char[]数组 * 由于c语言中没有像java,C#中的String(字符串),只有存放字符 的字符型数组当字符串使用(java中的String类也是对字符数组进行封闭的). * *