字符数组初始化问题!

trueadou 2006-09-04 09:32:36
在定义完一个字符数组后到底要不要用memset之类的函数初始化呢?比如:
char x[1024];
memset(x,0,1024);
strcpy(x, y);//或者sprintf之类
我曾经遇到过不初始化出错的情况,但读到很多别人的代码是没有用memset之类的函数初始化的,也不会出错,到底是什么原因呢?
...全文
2620 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
youngwolf 2006-09-04
  • 打赏
  • 举报
回复
如果char ca[1000]={0};就是初始化数组,那么char ca[1000]={0,0};岂不是非法操作了?!(写数组越界了,写了2000个字节的0)
trueadou 2006-09-04
  • 打赏
  • 举报
回复
char x[1024] = "\0";
这个也全部致零了?!
element_cn 2006-09-04
  • 打赏
  • 举报
回复
char x[1024] = "\0";
最好初始化,这是个好习惯
yangsky971 2006-09-04
  • 打赏
  • 举报
回复
char ca[1000]={0};是我认为最好的初始化操作,应该是全部致零了
yangsky971 2006-09-04
  • 打赏
  • 举报
回复
我的观点和楼上两位yang79tao和shenming123的综合起来基本相同
作用是yang79tao() 说的,至于yang79tao()说的没必要初始化我确不是很同意,如果你什么都能保证那为什么写的代码还有那么多笔误什么的,也就是我们心里的保证是不能完全保证的,既然这样那一个良好的习惯是有必要的
如if(NULL == p)
谁都可以说我保证不会只写一个等号,可是为什么还是说这个反着写是好习惯呢,就是因为我们可能保证的会出错。
另shenming123说的初始化char x[1024] = "\0";这个我同意,但是
char x[1024];
x[0] = 0;
这样好像有时是最不到预计的效果吧?这样真只初始化了一位呢。。。
trueadou 2006-09-04
  • 打赏
  • 举报
回复
char ca[1000]={0};这样的方式是把数组全部清零,还是第一字符清零?
菜牛 2006-09-04
  • 打赏
  • 举报
回复
对于数足,定义变量的时候就初始化效率高又安全。
char ca[1000]={0};
shenming123 2006-09-04
  • 打赏
  • 举报
回复
为保险起见,可以把第一字符置为0就可以了,而不至于降低效率
char x[1024] = "\0";

char x[1024];
x[0] = 0;
youngwolf 2006-09-04
  • 打赏
  • 举报
回复
至于楼主问在什么情况下出问题,比如使用memcpy,strncpy,memncpy等会出现问题,主要是因为,字符串必须以0为结束符,比如你的字符串长度为5,那么在6的位置上一定要有一个
0('\0',NULL等),但就为了写这么一个0,而把整个数组都memset为0,实在有些浪费!
youngwolf 2006-09-04
  • 打赏
  • 举报
回复
不memset,使用strcpy(x, y);//或者sprintf之类,在任何时候都不会出现问题,但下面的情况除外,就是strcpy时,y字符串的长度比1024-1(1023)还要长,但这种情况下,使用了memset也会出现同样的错误,所以memset并不能解决这个问题。

楼上认为一个好的习惯就是初始化,我并这不样认为,VB申请变量时从不初始化,因为它会自动初始化,而VC并不自动初始化,自动初始化带来更傻瓜的效果,但损失了效率,这从某种意义上说正是VB与VC的重要差别之一!

如下程序:
int i = 0;
i = 100 + j; //or for (i = 0; i < 10; i++)
都是很垃圾,很教条的程序,我看过一些MFC源码,在申明变量的时候也没有初始化,因为程序员可以保证,下面在使用前一定会初始化,但在申明的时候不能确定值为多少,这种情况下都不初始化,比如:
int i;
if (!j)
i = 100;
else
i = 10;
trueadou 2006-09-04
  • 打赏
  • 举报
回复
那什么时候会出现问题呢?
楼上的能不能解释下!
handsomerun 2006-09-04
  • 打赏
  • 举报
回复
一个好的习惯是要的

但是很多时候都不会出问题
trueadou 2006-09-04
  • 打赏
  • 举报
回复
再顶一次!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧