字符数组和字符串

以32位系统为例。

1、定义和初始化
字符数组:char c[10];
字符串:char s[] = "hello";

字符数组的定义和初始化可以在一起或者分开:
char c[10] = "qwer"; 或者
char c[10];
c[0] = ‘q‘; c[1] = ‘w‘;c[2] = ‘e‘; c[3] = ‘r‘;
不能这样:c = "qwer"
初始化时要注意数组大小,同时要保留\0的位置。
用printf打印字符数组时,数组中必须要有\0,否则会造成打印越界。

字符串的定义和初始化不能分开,但可以修改指定字符,如
char s[] = "hello"; s[1] = ‘o‘;

2、sizeof和strlen
sizeof(c)=10;就是实际的数组大小
sizeof(s)=6;大小是字符的个数+1(1是隐藏‘\0‘)
strlen不包含\0,如:
char c[10] = "wwer"; strlen(c) = 4;
char s[] = "helloz"; strlen(s) = 6;

3、引用
两者的引用方式相同,有两种:通过下标或者指针的方式,如:
字符数组:c[1] = ‘r‘ 或者 *(c + 1) = ‘r‘
字符串:s[1] = ‘r‘ 或者 *(s + 1) = ‘r‘

4、字符串相关操作函数
主要有以下这些,基本都定义在string.h里面。linux系统下面可以用man命令查看每个函数的用法。如:
[email protected]:~/work/code/ctest$ man str
strace strchr strcpy strerror strftime strlen strncpy strpbrk strsignal strtof strtol strtoul strverscmp
strcasecmp strchrnul strcspn strerror_r string strncasecmp strndup strptime strspn strtoimax strtold strtoull strxfrm
strcasestr strcmp strdup strfmon strings strncat strndupa strrchr strstr strtok strtoll strtoumax
strcat strcoll strdupa strfry strip strncmp strnlen strsep strtod strtok_r strtoq strtouq
[email protected]:~/work/code/ctest$ man strlen //查看strlen的用法

时间: 2024-10-29 10:45:38

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

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

今天在看书上的一段代码的时候发现有一段代码有问题,对于那段代码的错误进行一下解释. 并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释. 书上的错误代码大概如下: #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类也是对字符数组进行封闭的). * *

C语言字符数组与字符串

5.5.1 字符数组与字符串区别 l  C语言中没有字符串这种数据类型,可以通过char的数组来替代: l  字符串一定是一个char的数组,但char的数组未必是字符串: l  数字0(和字符'\0'等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组. 1 #include <stdio.h> 2 3 4 5 int main() 6 7 { 8 9 char c1[] = { 'c', '