最近看到一个数组声明和初始化的语句:char pbuf[500]={' '*499,'
'}; 最近看到一个数组声明和初始化的语句:char pbuf[500]={' '
最近看到一个数组声明和初始化的语句:char pbuf[500]={' '*499,'\0'};
虽然知道此语句是使用空格填充前499个字符,再用空字符结尾。
但以前好像没看过这种语法,也不知道还有没有其它初始化的方法。
哪位高手给解释一下,谢谢!
虽然知道此语句是使用空格填充前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));再用其他的方法赋值.
我知道的一般都是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;
再有什么问题,与我联系。
用这种办法不能达到将前多少个元素赋值的目的。
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个字符。
感谢各位指点!
我在“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;
}
#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',这样好像更方便一些...
要是想初始化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类型
#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]={' '