| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:字符数组为什么不可以先定义,然后再初始化呢?谢谢各位大侠
只看楼主 加入收藏
星星的故乡
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-10-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
字符数组为什么不可以先定义,然后再初始化呢?谢谢各位大侠
#include <string.h>
#include <stdio.h>

int main()
{
    char ch[20];

    ch[20]={"hello world!"};
    puts(ch);

    return 0;
}
程序代码:
--------------------Configuration: test61 - Win32 Debug--------------------
Compiling...
test61.cpp
test.cpp
f:\test.cpp(8) : error C2059: syntax error : '{'
f:\test.cpp(8) : error C2143: syntax error : missing ';' before '{'
f:\test.cpp(8) : error C2143: syntax error : missing ';' before '}'
执行 cl.exe 时出错.
test61.exe - 1 error(s), 0 warning(s)

编译时提示如下的错误:
搜索更多相关主题的帖子: include return color 
2013-11-20 22:05
飞羽络辰
Rank: 2
来 自:河南濮阳
等 级:论坛游民
帖 子:15
专家分:18
注 册:2013-11-19
收藏
得分:0 
    字符数组不能够先定义再初始化,只能在定义的同时进行初始化,如:char ch[20]={"hello word!"}这样可以,因为如果定义字符数组时不进行初始化,则数组中各元素的值将是随机产生的,其结果是不可预料的,所以必须在定义字符数组时进行初始化。
    如果定义时不进行初始化,你可以这样写:
      char ch[2];
      char[0]='H';
      char[1]='I';
    但是这样写会很大的浪费存储空间!不建议这样写。
  如果你不想在定义时初始化,那么建议你用字符指针,如:
    char *ch;
    ch="hello word!";这个可以这样写。
   就这些,不知对你有没有帮助。

简单可依赖!!!
2013-11-20 22:45
pink_duo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:209
专家分:1054
注 册:2013-11-5
收藏
得分:10 
你定义char ch[20]后,再使用ch[20]是表数组的第21个元素,数组已经越界。如果用ch[19],也只是表示数组的第20个元素

至于楼上所说的数组初始化的方式,可以这样 char ch[20] = {0};初始化为0

埋头做牛,抬头做人,低头做狗
2013-11-21 09:03
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:2 
如果定义时不给于初始化
那么后面只能  逐个元素进行赋值了...

三十年河东,三十年河西,莫欺少年穷!
2013-11-21 22:56
haiboself
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:196
注 册:2013-10-23
收藏
得分:0 
同意以上!!!
2013-11-21 23:23
jsyjzz
Rank: 2
等 级:论坛游民
帖 子:29
专家分:73
注 册:2013-11-8
收藏
得分:8 
一个字符串,如"hello",一般为字符串常量,可以用它对字符指针赋值,或初始化,相当于把这个字符串常量的首地址赋给这个指针,如:

char *p = "hello";

或者

char *p;

p="hello";

但是,当用"hello"给字符数组作初始化时,"hello",并非一个字符串常量,而是相当于一个初始化列表{'h','e','l','l','o','\0'},在其他任何时候,它都表示一个字符串常量。而数组名也是一个指针常量,不能对常量赋值。所以

char a[] = "hello"; //正确,hello",并非一个字符串常量,而是相当于一个初始化列表



char a[6];   

a = "hello"; //错误,a为指针常量,不能修改,当然也不能赋值
2013-11-22 13:39
快速回复:字符数组为什么不可以先定义,然后再初始化呢?谢谢各位大侠
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011549 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved