-
2019-03-02 11:14:59
char str[1024] = {0};
头文件为#include
更多相关内容 -
c++字符数组初始化
2021-11-09 17:33:08c++ 字符数组初始化在末尾加个\0 例如: char ch[8]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’,’\0’}; char ch[]=“program”; char ch[4]=“program”(错误,数组大小小于初始化的个数)字符数组初始化在末尾加个\0
例如:
char ch[8]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’,’\0’};
char ch[]=“program”;
char ch[4]=“program”(错误,数组大小小于初始化的个数) -
c++数组定义 初始化 输入和输出 字符数组定义初始化 输入和输出
2018-06-07 09:56:48很清楚展现了数组的定义, 初始化, 输入和输出 ,字符数组的应用,以及多维数组应用。 -
C++字符数组初始化和未初始化等系列问题分析
2020-04-08 20:46:101.字符数组未初始化里面元素值为多少 (1) 字符数组定义在main函数外面1.字符数组未初始化里面元素值为多少
(1)字符数组定义在main函数外面,s[i]的值为’\0’即为NULL(i=0,1,2,3…), (int)s[i]的值为0。#include<iostream> using namespace std; char s[5]; int main() { for(int i=0; i<5; ++i) { if(s[i]=='\0')//s[i]==0,s[i]==NULL都行 cout << "I'm coming home,Ace!" << endl; } return 0; }
#include<iostream> using namespace std; char s[5]; int main() { for(int i=0; i<5; ++i) { cout << (int)s[i]; } return 0; }
(2)字符数组定义在main函数里面,输出结果表现为乱码,(int)s[i]的值为随机数。#include<iostream> using namespace std; int main() { char s[5]; for(int i=0; i<5; ++i) cout << s[i]; cout << "End!" << endl; for(int i=0; i<5; ++i) cout << (int)s[i] << ' '; return 0; }
2.字符数组在部分初始化后,后面的元素自动赋值为’\0’#include<iostream> using namespace std; int main () { char s[10]="abcde"; //char s[10]={"abcde"}; //char s[10]={'a','b','c','d','e'};//三种初始化方式都一样 for(int i=0; i<10; i++) { if(s[i]=='\0') cout << '0'; else cout << s[i]; } return 0; } //输出结果为:abcde00000
注意:
#include<iostream> using namespace std; int main() { char s[10]; s[0]='a'; //这种类型不属于初始化,而是赋值 s[1]='b'; //等价于未初始化的数组,只是将其前五个数进行了赋值 s[2]='c'; //其余元素仍为乱码 s[3]='d'; //输出(int)s[i]为随机数(前五个数为 abcde 的 ASCII 码) s[4]='e'; for(int i=0; i<10; i++) { cout << s[i]; } cout << endl; for(int i=0; i<10; i++) { cout << (int)s[i] << ' '; } return 0; } /* 输出结果: 第一行为乱码 第二行前五个数为 abcde 的 ASCII码,其余数为随机数 */
3.字符数组初始的值全部置为’\0’的办法(即以%c读取为NULL即空,以%d读取为0)
(1)内存操作库函数memset
头文件cstring中声明:
void * memset(void * dest,int ch,int n);
将从dest开始的n个字节,都设置成ch。返回值是dest。ch只有最低的字节起作用。
例:将szName的前10个字符,都设置成’a’:
char szName[200] = “”;
memset( szName,‘a’,10);
cout << szName << endl;
=>aaaaaaaaaa#include<iostream> #include<cstring> using namespace std; int main() { char s[10]; memset(s,'\0',10); for(int i=0; i<10; ++i) { if(s[i]=='\0') cout << (int)s[i]; } return 0; } //输出为 0000000000
(2)char s[10]={0},从一开始就全部赋值为0
#include<iostream> using namespace std; int main() { char s[10]={0}; for(int i=0; i<10; ++i) { if(s[i]=='\0') cout << (int)s[i]; } return 0; } //输出为 0000000000
这样只要对字符数组进行连续赋值,便很容易通过下列代码遍历输出整个字符数组,而不用管字符数组的长度为多少:
#include<iostream> using namespace std; int main() { char s[20]="Cayde 6"; int i=0; while(s[i]!='\0') { cout << s[i++]; } return 0; } //输出 Cayde 6
参考:https://blog.csdn.net/weixin_38481963/article/details/79477903
感谢观看!
-
C/C++ | C语言字符数组初始化,有些赋值方式千万注意
2022-03-01 17:55:40一、字符数组的定义和初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 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++ 字符数组初始化
2013-06-13 16:46:01字符数组的输入输出可以有两种方法: (1) 逐个字符输入输出,不会在后面自动加\0结束符,需要记录数组长度,对应初始化的例子: const int N=8; char ch[N]={'a','b','c','d','e','f','g','k'}; 此时不会在其后... -
(C++)字符数组初始化的两种方法
2021-03-19 19:32:10//字符数组的两种赋值方法 int main(){ //1.方法一 char str1[14] = {'I',' ','l','o','v','e',' ','m','y',' ','m','o','m','.'}; for(int i = 0;i<=13;i++){ printf("%c",str1[i]); } printf("\n... -
c++字符数组的定义及初始化
2021-12-10 10:20:47定义时进行初始化: char ch[20]="cpp"; //ok cout << ch << endl; 仅定义不初始化 char ch[20]; ch = "cpp";//出现”表达式必须是可修改的左值“的错误提醒,编译报错“不可指定数据类型”。 ... -
C++字符数组 定义和初始化 赋值和引用
2019-01-23 11:55:39C++字符数组 定义和初始化 赋值和引用 -
字符数组初始化
2021-08-27 13:19:38编程良好习惯:定义char型数组时赋初值为'\0' 原因:当数组定义不赋值时,不同编译器为这个... 当采用这种方式初始化时,要注意等号后面的字符串长度要小于(等于也不行)字符数组元素个数。 比如array[20]代表数... -
C++数组初始化
2021-06-07 09:54:17数组 数组是一种类似于标准库类型vector的数据结构,但是在性能和灵活性的权衡上又与vector有所...可以对数组的元素进行列表初始化,此时允许忽略数组的维度。如果在声明时没有指明维度,编译器会根据初始值的数量计 -
C/C++ int数组初始化
2019-01-19 14:21:02C/C++初始化 静态数组 int array[100]; //定义了数组array,但并未对数组初始化; 静态数组 int array[100] = {0}; //定义了数组array,并将数组元素全部初始化为0; 静态数组 int array[100] = {1}; //定义了... -
c++数组初始化与删除用法大全
2022-05-04 11:16:31比如我们常用的数组,其初始化/删除就有非常多的方式,而且这些方式也比较混乱,没有特别的规律,很容易把人给直接绕晕圈了。下面我们来针对数组的初始化/删除方式做一个总结,如果有不对或者不全的地方,大家可以... -
C++中数组初始化方法
2022-04-25 20:45:12定义: int *pia = new int[10]; // array of 10 uninitialized ints 此new表达式分配了一个含有 10 个int型元素的数组,并返回...动态数组初始化: 1. 元素只能初始化为元素类型的默认值,而不能像数组变量一... -
c++字符数组未初始化及初始化后元素内容及其'\0'问题解析
2018-03-07 22:18:491、字符数组未初始化之前,里面的值是什么? (1)字符数组定义在main函数外面,a[i]的值为’\0’(i=1,2,3…),(int)a[i]的值为0。 int a[5] ,则: a[0] a[1] a[2] a[3] a[4] \0 \0 \0 \0 \0 ... -
C语言中字符数组初始化的几种方法
2019-04-14 16:39:301.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个... -
C++字符数组的定义与初始化
2015-10-26 21:00:581、字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花... -
【C++】C++数组初始化方法
2018-12-17 22:13:55定义: int *pia = new int[10];...此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。 在自由存储区中创建的数组对... -
C++数组初始化方法
2020-12-31 08:50:11//array of 10 uninitialized ints此new表达式分配了一个含有 10 个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia。在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接... -
C/C++数组初始化
2020-09-06 13:07:441、整型数组的初始化-栈初始化 //默认初始化 int a[5] = {}; //[0, 0, 0, 0, 0] //全部初始化为0 int a[5] = {0}; //[0, 0, 0, 0, 0] //c++11新写法 int a[5]{}; //[0, 0, 0, 0, 0] 2、字符串的初始化-栈初始化 ... -
c++ 数组置0_C/C++编程笔记:C语言字符数组初始化,有些赋值方式千万注意!
2020-11-20 11:48:14一、字符数组的定义和初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中... -
C 字符串数组初始化问题
2021-05-19 09:29:161、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'};3、利用strcpychar a[10]; ... -
C++:char数组初始化
2019-04-04 11:14:00char s[10] = "Hello"; // 剩余全用0填充 char s[10] = {'H','e','l','l','o','\0'}; //和上面效果一样 char s[10] = {'H','e'...char s[10] = {0} // 全部初始化为0 char s[10] = "Hello, world.\n"; // 超出部分丢... -
c++二维数组初始化
2020-03-15 16:43:06(c/c++定义二维数组初始化) C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0。 如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量... -
c++ 二维数组初始化
2020-07-24 10:17:151)静态数组 int array2[3][2]={{4,2},{5},{6}};...以上初始化完成,后续赋值及使用 例: array2[1][0]=1 ; int t=array2[1][0]; 释放二维数组 for (int i = 0; i < m;i++) { delete[]a -
C++:字符数组
2021-09-13 15:55:47字符数组的定义和初始化2. 字符数组的赋值和引用3. 字符串和字符串结束标志 1. 字符数组的定义和初始化 char c[3]; c[0] = 'a'; c[1] = 'b'; c[2] = 'c'; 等价于 char c[3] = {'a','b','c'}; 如果花括号中提供的... -
【C++】C++对象数组的定义和初始化
2021-09-24 15:13:17如果一个类有默认的构造函数,使用new动态实例化一个对象数组不是件难事,如下代码: class animal { public: animal():num(0) ...想要初始化对象数组的同时指定各个构造函数的参数,有以下几种解... -
C++动态数组初始化 -- new/delete
2018-06-07 15:03:56// array of 10 uninitialized ints此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。在自由存储区中创建的数组对象是没有名字的,只能...