精华内容
下载资源
问答
  • c语言字符数组初始化
    千次阅读
    2020-09-07 19:27:53
    	首先为什么要初始化数组:假如创建了一个没有初始化的数组,里面其实各个位置是含有值的,举例: 
    	char a[10];
    	char b[] ="duiao1222";
    	strcpy(a,b);
    	非常简单的函数就是让a为b的一个复制数组,但是真的去输出a的时候,结果并不是这,这是因为a并不是一个全为0的字符数组。
    	最为简单的初始化方法就是char a[10] = {0};就可以将所有位置初始化为‘\0’。
    	当然可能会有一些情况导致这种方法不能初始化,或者字符数组是动态创建的,没有一个可以进行{0}的一个方式的话,建议使用memset函数。
    	memset(void * a,int b, size c)其中void * a是任意类型的数组或是指针,int b为初始化的内容(由于是初始化内存所以内存只能为0/-1),size c 为将a中设置初始化的长度。
    
    更多相关内容
  • 一、字符数组的定义和初始化 字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花...

    一、字符数组的定义和初始化

    字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。

    charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};

    即把10个字符分别赋给str[0]到str[9]10个元素

    如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0')

    如char str[10] = {'\0'}; //结果里面元素全都为\0.其实这样赋值只是把第1个元素赋值为\0,后面的都默认用\0填充,如果是char str[10]={'1'};

    只有第一个为‘1’,后面都是\0。但千万不要以为写成char str[10];不赋值也可以。这样写里面的内容是乱的。

    这是细节,值得注意。

    所以我们最好每次想写char str[5]都写成

    char str[5]='\0';

    这样做最好。

    int a[10]={4,5};

    第一个赋值为4,第二个为5,后面的为0.如果直接int a[10]; 内容很乱。

    规律:用某个值给数组赋值,没有被赋值的元素会自动调用默认的构造函数,如char默认为\0,int默认为0.等等.

    二、字符数组与字符串

    在 c语言中,将字符串作为字符数组来处理。(c++中不是)

    在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,

    定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0’代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到第一个字符'\0'时,表示字符串结束,由它前面的字符组成字符串。

    系统对字符串常量也自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的。(通过 sizeof()函数可验证)

    了结束标志'\0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如 char str[ ])

    说明:'\n’代表 ASCII 码为0的字符,从 ASCII码表中可以查到 ASCII 码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。

    对C 语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

    注意sizeof与strlen的不同:

    char a[40]={'0'};

    printf("%d",sizeof(a));//开辟的数组的总大小40*1

    printf("%d",strlen(a));

    输出 40,1.

    char str[ ]={"I am happy"}; 可以省略花括号,如下所示

    char str[ ]="I am happy";

    注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,如:

    char d[5];

    d="hell";

    错误。vs2010提示表达式d必须是可修改的左值。

    这跟

    int a[5]={1,2,3};

    而不能

    int a[5];

    a={1,2,3}

    数组只能在初始化的时候一次性赋值,其他时候必须要一个一个赋值。

    看来数组名和指针是有区别的。

    下面的赋值方法是错误的

    char str[ ];

    str="I am happy";

    不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"的最后由系统自动加上一个'\0')

    因此,上面的初始化与下面的初始化等价

    char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};必须要人为加上一个\0,否则strlen不正确。

    而不与下面的等价

    char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};//strlen错误,后面没有\0

    前者的长度是11,后者的长度是10.

    说明:字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面这样写是完全合法的。

    char str[5]={'C','h','i','n','a'};

    可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。

    、赋值方式

    对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值

    char str[14];

    str="I love China"; (但在字符数组初始化时可以,即 charstr[14]="I love China";)

    而对字符指针变量,采用下面方法赋值:

    char* a;

    a="I love China";

    或者是 char* a="I love China"; 都可以

    对字符指针变量赋初值(初始化):

    char* a="I love China";

    等价于:

    char* a

    a="I love China";

    而对于字符数组的初始化

    char str[14]="I love China";

    不能等价于:

    char str[14];

    str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)

    转载C/C++编程笔记:C语言字符数组初始化,有些赋值方式千万注意! - 知乎

    展开全文
  • C语言字符数组初始化

    2021-05-20 12:25:15
    (1)charstr[10]={'I','','a','m','','h','a','p','p...若小于数组长度,则只将这些字符数组中前面赋值,其余的元素自动定位空字符(即'\0');若刚好相等,可以使用strlen等函数,此时会自动在最后加上'\0'(自测试)。(...

    (1)char str[10]={'I','','a','m','','h','a','p','p','y'};

    即把10个字符分别赋值给str[0]到str[9]10个元素;

    如果花括号中提供的字符个数大于数组长度,则按语法错误处理;

    若小于数组长度,则只将这些字符数组中前面赋值,其余的元素自动定位空字符(即'\0');

    若刚好相等,可以使用strlen等函数,此时会自动在最后加上'\0'(自测试)。

    (2)char str[]={"I am happy"}; <==> char str[]={'I','','a','m','','h','a','p','p','y','\0'};

    可以省略花括号,如下:char str[]="I am happy"; 不等价与char str[]={'I','','a','m','','h','a','p','p','y'};

    注意1:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于

    字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是

    错误的:

    char str[11];

    str="I am happy";

    而对字符指针变量,采用下面方法赋值:

    char* a;

    a="I love China";

    或者是char* a="I love China"; 都可以

    (3)字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',像下面这样写是完全合法的:

    char str[5]={'C','h','i','n','a'};

    展开全文
  • C语言字符数组初始化.pdf
  • C语言字符数组,字符数组的长度;
    void CChartestView::OnDraw(CDC* pDC)
    {
    	CChartestDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	// TODO: add draw code for native data here
    	char name[10];
    
    	name[0]='a';
    	name[1]='b';
    	name[2]='c';
    	pDC->TextOut(50, 50, name);
    
    	char a[10];
        a[0] = 'i'; a[1] = ' '; a[2] = 'l'; a[3] = 'o'; a[4] = 'v'; 
        a[5] = 'e'; a[6] = ' '; a[7] = 'y'; a[8] = 'o'; a[9] = 'u'; 
        a[10] = '\0'; 
    	pDC->TextOut(50, 80, a);
    
    	char b[10];
        b[0] = 'i'; b[1] = ' '; b[2] = 'm'; b[3] = 'i'; b[4] = 's'; 
        b[5] = 's'; b[6] = ' '; b[7] = 'y'; b[8] = 'o'; b[9] = 'u'; 
    	pDC->TextOut(50, 110, b);
    
    	char c[] = "i believe you";
    	pDC->TextOut(50, 140, c);
    	CString str1;
    	str1.Format("c的长度:%d", strlen(c));
    	pDC->TextOut(200, 140, str1);
    
    	char d[] = {'a', 'b', 'c', 'd','\0'};
    	pDC->TextOut(50, 170, d);
    	str1.Format("d的长度:%d", strlen(d));
    	pDC->TextOut(200, 170, str1);
    
    	char f[] = "上课睡觉觉";
    	pDC->TextOut(50, 200, f);
    	str1.Format("f的长度:%d", strlen(f));
    	pDC->TextOut(200, 200, str1);
    }

    输出;

     

    先看name,字符数组是按下标来赋值;

    a也是,字符数组以 '\0' 结束;

    b的时候,出了一些问题,因为没有找到结束的 '\0' ;

    也可以如c一次性赋值,用strlen(c)求c的长度;

    d赋了4个字符,和一个'\0',输出d,再输出d的长度, d的长度是4;

    如f,赋值中文也没问题;五个中文,字符数组长度为10;

    展开全文
  • 一、字符数组的定义和初始化 字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花...
  • 初学字符串数组时常常被那些绕弯的题搞得头昏脑胀,下面来简单聊一下字符数组初始化和复制函数的一些需要注意的问题。 字符数组初始化方式 如果指定一个长度为5的字符数组,并且赋满值,这时并没有多余的空间str[5]...
  • c语言结构体数组初始化

    千次阅读 2021-05-22 13:03:19
    有关结构体数组初始化的问题struct _m_usmart_nametab usmart_nametab[]={#if USMART_USE_WRFUNS==1 //如果使能了读写操作(void*)read_addr,"u32 read_addr(u32 addr)",(void*)write_addr,"void write_addr(u32 addr...
  • 字符数组初始化与赋值 Dabelv 转载自 https://cloud.tencent.com/developer/article/1177439 代码编译运行环境:VS2017+Win32+Debug 1.字符数组初始化方式 C语言中表示字符串有两种方式,数组和指针,字符数组是...
  • C语言字符数组

    2021-05-19 07:57:30
    C语言字符数组初始化教程C语言字符数组初始化一参数char arrName[count] = {'val1', 'val2', 'val3', ....};说明我们可以在 {} 写上一系列的值,用来初始化字符数组的值。C语言字符数组初始化二语法#include char ...
  • //字符数组初始化 char c1[3] = {'A','a','c'}; printf(&quot;%d\n&quot;, sizeof(c1)); //3 char c2[10] = { 'A', 'a', 'c'}; printf(&quot;%d\n&quot;, sizeof(c2)); //10 char c3[] = { 'A'...
  • C语言字符数组初始化的几种方法

    万次阅读 多人点赞 2019-04-14 16:39:30
    1.C语言中的字符数组初始化C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个...
  • C语言数组初始化

    千次阅读 2021-05-20 12:57:15
    C语言数组初始化教程C语言数组初始化一语法type arrName[count] = {val1, val2, val3, ....};参数参数描述type数组中每一个元素的数据类型。arrName数组的变量名。count数组能存储的元素的个数。val给数组初始化的值...
  • C语言数组初始化

    千次阅读 2021-01-16 13:44:57
    PDF的居然不然复制,就把它这章翻译了,例如以下 5.2.1 数组初始化 数组能够用一个列值来初始化,比如 int v1[] ={1,2,3,4}; char v2[]={'a','b','c',0}; 当数组定义时没有指定大小,当初始化採用列表初始化了...
  • #include <stdio.h> int main() { int arr[10] = {0xFF}; for(int i = 0; i < 10; i++) ... printf("arr[%d] = %d\n", i, arr[i]);...uidh2917@hiv3209u:~/Source$ gcc TestArray.c...
  • 一、字符数组的定义和初始化字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中...
  • C语言字符数组的定义与初始化

    万次阅读 多人点赞 2018-01-17 11:19:20
    1、字符数组的定义与初始化 字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 ...
  • C语言字符数组初始化的问题

    千次阅读 2018-11-11 19:32:53
    今天写一个十六进制数转换八进制数的算法,调了一天都发现有错,最后一步一步测试,发现是字符数组没有初始化的问题,但是其中的原因让我费解,甚至是感到不可思议。 以下是遇到问题的代码部分: int main(){ int ...
  • 今天小编就为大家分享一篇C语言不定长数组初始化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 字符数组初始化为空

    万次阅读 2020-04-08 16:38:20
    字符数组初始化为空1. 总结起来有以下三种方式:2. 分析3. 结论 1. 总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={’\0’}; (3) char str[10] = ‘\0’; 2. 分析 第(1)(2)种方式是将str数组的...
  • 1、字符数组的定义与初始化字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]={ ‘I’,’ ‘,’a’,’m’,’ ‘,‘h’,’a’,’p’,’p’,’y’};即把10个字符分别赋给str[0]到str[9]...
  • C语言字符初始化错误在写指针数组题目时,遇到数字转换问题。问题如下:将大于0小于1000的阿拉伯数字转换为罗马数字。表示个位数:I,II,III,IV,V,VI,VII,VIII,IX表示十位数:X,XX,XXX,XL,L,LX,LXX,...
  • (1)什么是字符数组字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,...(2)关于字符数组初始化 直接逐个初始化字符数组: char ch[11...
  • 字符数组及其定义和初始化C语言字符数组详解字符串的存储方式有字符数组和字符指针,我们先来看看字符数组。因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对...
  • C语言数组初始化的三种方法

    万次阅读 多人点赞 2019-09-27 10:34:48
    C语言中,数组初始化的方式主要有三种: 1、声明时,使用 {0} 初始化; 2、使用memset; 3、用for循环赋值。 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码: #define ARRAY_SIZE_MAX (1*1024...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,069
精华内容 44,427
关键字:

c语言字符数组初始化