C语言字符数组回顾

赋值篇:



Part1      错误引例*2:

1     char c6[];//WRONG
2     c6="HELLO";//WRONG
3
4     char c7[];//WRONG
5     c7[0]=‘H‘;//WRONG
6     c7[1]=‘E‘;//WRONG
7     c7[2]=‘L‘;//WRONG
8     c7[3]=‘L‘;//WRONG
9     c7[4]=‘O‘;//WRONG

1.不允许声明之后才对整个字符数组进行赋值,比如c6

2.除非声明时顺便赋值了,否则不允许不声明数组长度,比如c7


Part2:

1     char c1[]={‘H‘,‘E‘,‘L‘,‘L‘,‘O‘};
2     char c2[]={‘H‘,‘E‘,‘L‘,‘L‘,‘O‘,‘\0‘};
3     char c3[10]={‘H‘,‘E‘,‘L‘,‘L‘,‘O‘,‘\0‘};
4     printf("c1:%s  sizeofc1:%d\n",c1,sizeof(c1));
5     printf("c2:%s  sizeofc2:%d\n",c2,sizeof(c2));
6     printf("c3:%s  sizeofc3:%d\n",c3,sizeof(c3));

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



Part3:

1     char *c4="HELLO";
2     char *c5="HELLO\0";
3     char *c6;
4     c6="HELLO";
5     printf("c4:%s  sizeofc4:%d\n",c4,sizeof(c4));
6     printf("c5:%s  sizeofc5:%d\n",c5,sizeof(c5));
7     printf("c6:%s  sizeofc6:%d\n\n",c6,sizeof(c6));

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



Part4:

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

1.注意用字符串常量赋值会自动补‘\0‘

2.注意就算你自己加了‘\0‘还是会给你自动加‘\0‘


Part5:

 1     char c9[5];
 2     c9[0]=‘H‘;    c9[1]=‘E‘;
 3     c9[2]=‘L‘;    c9[3]=‘L‘;    c9[4]=‘O‘;
 4
 5     char c10[6];
 6     c10[0]=‘H‘;    c10[1]=‘E‘;
 7     c10[2]=‘L‘;    c10[3]=‘L‘;
 8     c10[4]=‘O‘;    c10[5]=‘\0‘;
 9     printf("c7:%s  sizeofc7:%d\n\n",c7,sizeof(c7));
10     printf("c9:%s  sizeofc9:%d\n\n",c9,sizeof(c9));
11     printf("c10:%s  sizeofc10:%d\n\n",c10,sizeof(c10));

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



Part6      scanf输入:

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

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

1     char a[10];
2     gets(a);
3     puts(a);

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

函数篇:



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

1     char c11[6];
2     strcpy(c11,"HELLO\0");
3     printf("c11:%s  sizeofc11:%d\n\n",c11,sizeof(c11));

功能:复制

1.dest只能是数组名,且已经声明过长度,sr可以实字符串常量或数组名且最末尾必须是‘\n‘

2.注意c11不可以不声明长度就开始复制

3.假如要用到指针,也必须使指针已经指向某个数组才能使用,比如这样

1     char *c11;
2     char temp[6];
3     c11=temp;
4     strcpy(c11,"HELLO\0");
5     printf("c11:%s  sizeofc11:%d\n\n",c11,sizeof(c11));

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

1     char c7[]="HELLO";
2     char c8[]="HELLO\0";
3     printf("c8:%s  sizeofc8:%d\n",c8,sizeof(c8));
4     printf("c8+c7:%s\n",strcat(c8,c7));
5     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):

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

功能:求实际长度

原文地址:https://www.cnblogs.com/dudulukeyxian/p/10614289.html

时间: 2024-10-02 17:54:32

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

C语言——字符数组

在C语言编程中,我们一般用一个字符数组来存放一个字符串.例如,我们想存储这个字符串“http://i.cnblogs.com”,这个字符串一共有20个字符,要存放下这个字符串,我们需要一个长度为21的字符数组.为什么是21个而不是20个呢?在C语言中,字符串数组默认以'\0'结尾,所以我们一共需要一个长度为21的字符数组来存储这个变量. unsigned char text[21] = “http://i.cnblogs.com”; 既然我们已经知道了如何存放一个字符串,那下面我们来讨论另外几个

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

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

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

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

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

C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结束符'\0' 使得 strlen(pS); strlen(s); //均为6,未计算带'\0'的长度,拷贝字符串时,真实容量应+1: 若使用sizeof可以看到 sizeof(s)/sizeof(char);//这个值为7 所以在使用strncpy时切记strlen+1: 另,printf和strcpy等均以

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语言字符数组和指针的经典用法

1.字符数组 许多情况下,对字符串的处理使用字符数组会更加方便,比如: 我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好. eg:给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个.例如:"   i    am a      little boy.    ",变成"i am a little boy",语言不限,但不要用伪代码作答. answer: #inclu

C语言-字符数组和字符串

1:概念 用来存放字符的数组成为字符数组. 例如: char a[10]={'a','b','c','d','e','f','j','g','f','k'};// [注意]在C语言中没有字符串,所以用字符数组来存放字符串. 例如: char a[30]={"shisihuansheng.blog"}; char a[30]="shisihuansheng.blog";//这个写法更为简洁,方便,开发时候经常使用. a[0]=s;a[1]=h 依次类推. 在C语言中,

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', '

windows下查看C语言字符数组(俗称:字符串)在内存中地址信息的操作过程

#include <stdio.h> #pragma warning(disable:4996) int power10(int n) { if (n == 0) { return 1; } int val = 10; for (int i = 1; i < n; i++) { val *= 10; } return val; } 在开发平台vs2013下面,选择调试->窗口->内存->内存1 1 int main(int arg, char *args[]) 2 {