阅读背景:

请教:字符数组初始化的语法有哪些?

来源:互联网 
最近看到一个数组声明和初始化的语句:char pbuf[500]={' '*499,'
最近看到一个数组声明和初始化的语句:char pbuf[500]={' '*499,'\0'};
虽然知道此语句是使用空格填充前499个字符,再用空字符结尾。
但以前好像没看过这种语法,也不知道还有没有其它初始化的方法。
哪位高手给解释一下,谢谢!

13 个解决方案

#1


没有!而且这种用法也没见过,实验了一下,输出也不是499个*啊,只输出了一个'

#2


有,可以用memcpy初始化。

#3


过儿看错了吧,lz是说499个空格

#4


不过 ''*499  不就是一个int值吗?没办法初始化499个字符吧

#5


我没有见过楼主的这种char pbuf[500]={' '*499,'\0'}; 写法,用gcc编译器测试了,结果输出的是一个字符,`或者'.
我知道的一般都是char pbuf[500] = "abcdef";
或者先memset(pbuf, 0, sizeof(pbuf));再用其他的方法赋值.

#6


没见过这种初始化方法

#7


1.char pbuf[500]={' '*499,'\0'};这种用法说错误可能有些片面,但实际的作用是:在C++中,字符型存储的就是它的ASCII码,' '*499是指将空格的ASCII码*499,然后做为pbuf[0]的值,空格的ASCII码为32,32*9=288,288转换为二进制为0001 0010 0000,低8位0010 0000被选取用作字符的ASCII码,它恰好是空格的ASCII码,当然什么也看不见。
  用这种办法不能达到将前多少个元素赋值的目的。
2.常见字符数组初始化的方法有:
(1)char c[]="how much";//数组的长度被自动初始化为字符的有效长度8+1=9,多出来的1用于存放'\0'字符串结束标志,这种情况下,不用人为再加上'\0',多加反而会增加数组占用内存空间,如:
    char c[]="how much";
   cout<<sizeof(c);//9
   cout<<strlen(c);//8
   char cc[]="how much\0";
   cout<<sizeof(cc);//10
   cout<<strlen(cc);//有效字符数仍然为8
(2)char c[]={'h','o','w',' ','m','u','c','h','\0'};//此时字符串结束标志应指出,并且要给出所有元素的值,编译器会根据给出元素值的个数决定数组元素的个数。
(3)char c[9]="how much";
(4)char c[9]={'h','o','w',' ','m','u','c','h','\0'};
    (3)(4)两种情况指定了数组元素的个数,这时初始化时给定的字符数含'\0'应少于或等于数组元素的个数,否则会通不过编译。
(5)char* pc="how much";
     cout<<pc[0]<<endl;
     cout<<pc[1]<<endl;

再有什么问题,与我联系。

#8


谢谢各位!
我在“Visual C++ 6.0开发宝典”里看到这个语句。
想想可能作者仅仅是为了表达全部初始化的意思,实际上应该就只初始化了2个字符。
感谢各位指点!

#9


这个是你想要的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char pbuf[500];

memset(pbuf,' ',499);
pbuf[499]='\0';

system("pause");
return 0;

#10


32*499不是32*9,同时我觉得这样做没有意义

#11


不好意思,我真看错了...

要是想初始化499个空格,那就直接memcopy()500个,然后手动把最后一个改成'\0',这样好像更方便一些...

#12


这个是你想要的: 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 

char pbuf[500]; 

memset(pbuf,' ',499); 
pbuf[499]='\0'; 

system("pause"); 
return 0; 


//
memset(pbuf,' ',499); 这一句''语法就通不过吧!需要的是int类型

#13


汗,是我自己写错了给,拍自己先!

'}; 最近看到一个数组声明和初始化的语句:char pbuf[500]={' '



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: