c语言字符串数组初始化
‘壹’ c语言字符数组初始化的问题
char *a[ ]={"asdf","asdfsadf"}这个是指针数组,相当于char *a[2]={"asdf","asdfsadf"}
然后第一个是char a[1] = {'a','s','d'},char a[2] =......
char a[ ]={"asdf","asdfsadf"} 这样是不行的,如果是字符数组,就得用单引号,双引号是字符串,
char m1[ ]={'a','b','c''\0'} 这个是字符数组,
char m1[ ]={'a','sdfb','c''\0'},这样是不行的,单引号里面是一个字符,双引号才能出现连续字符。
如有不明可以追问。
‘贰’ c语言字符数组初始化
如果是定义的全局,变量字符数组可以不用初始化因为全局变量会自动初始化为0值。如果是局部变量可以在定义的时候就给他初始化,也可以在定义完成以后,再用一个循环对他的所有元素进行初始化。
‘叁’ C语言 程序设计 关于数组的初始化
你好!!!
char s[]="BOOK"
char s[10]="BOOK"
都表示在声明数组的时候,就初始化,就是先了定义,即给数组分配了内存空间,系统并把字符“BOOK”,放到刚才的空间里,所以是符合语法的。
但是
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
都是错误的,原因是:语法规定字符数组要是在声明的时候没有初始化,就没有机会直接赋值了(具体的原因后面再说)
要想赋值,必须用strcpy()
但是我们定义字符指针就不一样了,比如:
char *p;
p="hello";表示此时定义了一个指针变量,此时系统会把字符串="hello";放到内存的静态存储区(即内存的一种,是静态的原因是里的值是不能修改的)并把字符串的首地址赋值给指针变量p,使指针变量指向字符串;这是可以的。
现在我们看看:
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
到底是什么原因:
char s[10];首先声明了字符数组,但是没有分配空间,接着
s[10]="BOOK"因为现在的是数组s已经声明过了,系统会先字符串放到静态存储区,然后返回一个指针,但是此时等号左边是数组而且有10个字节这么大,等号两边都是不同类型的,怎么可以赋值呢???
编译器检查错误就会报错了。
呵呵,希望lz可以理解。
‘肆’ c语言如何先声明后初始化字符数组
在定义的时候就对数组进行赋值操作称为初始化;
先定义后赋值并不能称为初始化,只能叫做对数组进行赋值操作。
举例如下:
chara[]="abcd";//定义(声明)字符数组a,并进行初始化
//以下为数组的赋值操作
charb[5];//定义(声明)一个字符数组b
//对字符数组每个元素进行赋值
b[0]='a';
b[1]='b';
b[2]='c';
b[3]='d';
b[4]='e';
‘伍’ c语言的字符串数组初始化问题
你申请数组空间后,内存中存放字符的顺序是:
str1[0],str1[1],str1[2],str1[3],str1[4],str2[0],str2[1],str2[2],str2[3]
当输入字符串是:abc 123时,存储的数据str1[0]~str1[4],str2[0]~str2[3]为:
‘a','b','c',0,xx,'1','2','3',0
其中,xx表示一个不关心的任意值,也就是说输入字符串"abc"需要占用4个字节的存储空间
当输入字符串1为"abcde"时,存储的数据为:'a','b','c','d','e',0,xx,xx,xx
字符串末尾的0已经超出了str1开设的存储空间而存放到了str2[0]位置
接着再输入字符串"1234"时,str2[0]的str1字串的结尾符被字符'1'覆盖,
存储的数据为:'a','b','c','d','e',’1‘,’2‘,’3‘,’4‘,0
而且由于str2输入字符数为4个其占用空间也超出了str2的空间范围,那么上边存储的0值也不知道覆盖了什么变量的位置,导致其他变量的值被冲掉了。
当执行printf("%s ",str1);时,printf从str1[0]开始输出的字符串(遇0结束输出)为abcde1234
当执行printf("%s ",str2);时,printf从str2[0]开始输出的字符串(遇0结束输出)为1234
所以你输入的第1个字符串字符数少于5时,存储不会溢出,多于4个时,末尾的0就会被输入的str2所覆盖而失效,且多于5的字符也会被覆盖。scanf并不能保证输入字符的长短不会溢出,你应当在设计程序时考虑到这点,预先定义足够的字符串保存空间或用其他方法来避免这个问题的出现。
‘陆’ C语言定义字符型数组时,两种初始化方式的区别
‘柒’ C语言中 字符串数组的初始化格式是怎么样的
比如:
char
a[10]="\0";
用API
memset(a,'\0',sizeof(a));
也可以写个for来完成
记得采纳啊
‘捌’ c语言 如何将已赋值的字符串初始化为空
可以使用memset函数将字符串数组中所有元素全部设置为\0即可。
函数原型:void
*memset(void
*s,
int
ch, size_t n);
函数说明:将s中前n个字节
(typedef
unsigned
int
size_t
)用
ch
替换并返回
s
。
示例:
#include <stdio.h>
#include <string.h>
int main()
{
char buf[256] = "hello world"; //buf字符数组初始化
printf("%d\n", strlen(buf));
memset(buf, 0x00, sizeof (char) * 256); //全部设置为0x00即\0字符
printf("%d\n", strlen(buf));
return 0;
}
‘玖’ C语言中,字符数组(字符串)初始化方式区别
数组长度指的是数组的元素个数,字符串长度是以‘\0’为标志来确定的,举个例子:
char a[20]="abc";
数组长度是20,而字符串长度是3,隐含的'\0'不算在字符串长度中。
‘拾’ c语言字符串对字符数组初始化
不可以,array bound overflow,数组越界,还要存一个'\0'.
其实碰到这种问题,你应该自己去开发环境中试一下,看看报不报错。