免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2104 | 回复: 6
打印 上一主题 下一主题

请教各位一个C初始化问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-02 14:28 |只看该作者 |倒序浏览
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <strings.h>
  4. #include <stdlib.h>
  5. #include <memory.h>
  6. #include <assert.h>
  7. #include <sys/types.h>
  8. #include <unistd.h>
  9. #include <errno.h>
  10. #include <sys/times.h>
  11. #include <sys/ioctl.h>
  12. #include <procinfo.h>
  13. #include <math.h>

  14. main(int argc, char *argv[])
  15. {
  16.         FILE *fp;
  17.         fp = fopen("gqq.test","w");
  18.         if(fp == NULL)
  19.         {
  20.                 printf("file is not exist\n");
  21.                 return -1;
  22.         }
  23.         char aczStdLine[1024];
  24.         memset(aczStdLine,'0',137);
  25.         aczStdLine[137]='\n';
  26.         fputs(aczStdLine,fp);
  27.         fflush(fp);
  28.         memset(aczStdLine,0,sizeof(aczStdLine));
  29.         strcpy(aczStdLine,"aaabbbcccdddeeefffggghhhfzxcqnwreqjrn1\n");
  30.         fputs(aczStdLine,fp);
  31.         strcpy(aczStdLine,"aaabbbcccdddeeefffggghhhfzxcqnwreqjrn2\n");
  32.         fputs(aczStdLine,fp);
  33.         fflush(fp);
  34.         fclose(fp);
  35.         return 0;
  36. }
复制代码
执行后文件内容如下:
00000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
@悩aaabbbcccdddeeefffggghhhfzxcqnwreqjrn1
aaabbbcccdddeeefffggghhhfzxcqnwreqjrn2

想不明白为什么第二行会有乱码在前面。

是初始化问题,还是fputs的原因?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2011-12-02 14:40 |只看该作者

aczStdLine[137]='\n';
后面再加一句
aczStdLine[138]='\0';

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2011-12-02 14:41 |只看该作者
本帖最后由 bruceteen 于 2011-12-02 14:42 编辑

已删!网速不好,发现重复发帖了

论坛徽章:
0
4 [报告]
发表于 2011-12-02 14:46 |只看该作者
或者别用局部自动变量,加个static/弄到函数外面也行,不显式初始化会填0。

论坛徽章:
0
5 [报告]
发表于 2011-12-02 16:17 |只看该作者
int fputs ( const char * str, FILE * stream );
Write string to stream

Writes the string pointed by str to the stream.
The function begins copying from the address specified (str) until it reaches the terminating null character ('\0'). This final null-character is not copied to the stream.


定义的局部变量char aczStdLine[1024];未初始化时内容未知,刚开始数组填充了137个0,不过没有字符串结束符,fputs写入时会持续写直到碰到字符串结束符。所以你这里文件显示137个0后出现了乱码。说明数组中137个0后面没有直接跟上'\0'。

论坛徽章:
0
6 [报告]
发表于 2011-12-02 16:47 |只看该作者
本帖最后由 keytounix 于 2011-12-02 16:49 编辑

回复 1# bocheny

aczStdLine[137] ='\n'

    aczStdLine[138]  未知
aczStdLine[139]  未知
aczStdLine[140]  
。。
aczStdLine[xx] 碰巧遇上'\0'了

你这个程序每次执行后的 结果也应该是不一样的

建议解决方法

char aczStdLine[1024]={0};

论坛徽章:
0
7 [报告]
发表于 2011-12-02 20:10 |只看该作者
是有一个字节对齐的问题,你写入字符没有刚好到达一个对齐,余下的就是随机数,直到下一个对齐
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP