搜索
bottom↓
回复: 4

输出结构体数组中的一个成员时怎么把下一个数组的内容也输出了呢?输出越界了,谁遇见过

[复制链接]

出0入0汤圆

发表于 2012-3-5 08:14:51 | 显示全部楼层 |阅读模式
函数如下:


#include <stdlib.h>
#include <stdio.h>
struct
{
    char Local_IP[17];
    char Host_IP[23];
    char Subnet_Mask[17];
    char Gateway[17];
    char Alarm_Start_H;
    char Alarm_Start_M;
    char Alarm_End_H;
    char Alarm_End_M;
    unsigned short Time_Interval;
}WIFI_Alarm_Config;
int main()
{
    FILE *fp;
    char i=0;
    char buffer[512]={0};
    if((fp=fopen("d:/config.ini","rb+"))==NULL)
    {
        printf("Cannot open file!");
        while(1);
    }
    fread(buffer,sizeof(buffer),1,fp);
    fclose(fp);

    for(i=0;i<17;i++)
        WIFI_Alarm_Config.Local_IP=buffer[i+3];

    for(i=0;i<23;i++)
        WIFI_Alarm_Config.Host_IP=buffer[i+23];

    for(i=0;i<17;i++)
        WIFI_Alarm_Config.Subnet_Mask=buffer[i+49];

    for(i=0;i<17;i++)
        WIFI_Alarm_Config.Gateway=buffer[i+69];


    printf("%s",WIFI_Alarm_Config.Local_IP);

    return 0;
}

config.ini中的内容如下:

LP:192.168.001.022
HP:192.168.001.003:08888
SM:255.255.255.000
GW:192.168.001.001
AS_H:12
AS_M:22
AE_H:12
AE_M:55
TI:00120
------------------------------------------------------------------------------------

(原文件名:2.jpg)


(原文件名:3.jpg)


函数运行后的结果为:


(原文件名:1.JPG)




为什么我输出这么多呢??应该输出:192.168.001.022就对了啊???

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-3-5 08:26:21 | 显示全部楼层
应该是传说中你的字符串后面没有\0导致的。

出0入0汤圆

 楼主| 发表于 2012-3-5 08:29:51 | 显示全部楼层
回复【1楼】lcofjp 卡尔夫
-----------------------------------------------------------------------

我加在后面加 \n 了也不管用啊

出0入0汤圆

发表于 2012-3-5 08:31:21 | 显示全部楼层
当然不管用了,\n是换行而已,直接输出了。你加个\0包你管用。

出0入0汤圆

 楼主| 发表于 2012-3-5 08:46:06 | 显示全部楼层
回复【3楼】lcofjp 卡尔夫
-----------------------------------------------------------------------

多谢提醒,问题解决了,我先加了\0,在输出时还要把\n加上,否则前面输出的别后面的覆盖了

哎,都是 \r\n,\r,\n惹的祸,为什么几大系统不统一成一个呢???

完整版的元程序:

#include <stdlib.h>
#include <stdio.h>
//在windows中默认的以'\r\n'表示文本换行,如果指定文本模式读写文件时,则读取文件时会自动将回车换行转换为'\n',而在写入时又自动将'\n'转换为'\r\n'
struct
{
    char Local_IP[17];
    char Host_IP[23];
    char Subnet_Mask[17];
    char Gateway[17];
    char Alarm_Start_H;
    char Alarm_Start_M;
    char Alarm_End_H;
    char Alarm_End_M;
    unsigned short Time_Interval;
}WIFI_Alarm_Config;
int main()
{
    FILE *fp;
    char i=0;
    static char buffer[512]={0};
    if((fp=fopen("d:/config.ini","rb+"))==NULL)
    {
        printf("Cannot open file!");
        while(1);
    }
    fread(buffer,sizeof(buffer),1,fp);
    fclose(fp);
    //得到本地IP
    for(i=0;i<17;i++)
        WIFI_Alarm_Config.Local_IP=buffer[i+3];
    WIFI_Alarm_Config.Local_IP[16]='\0';
    for(i=0;i<23;i++)
        WIFI_Alarm_Config.Host_IP=buffer[i+23];
    WIFI_Alarm_Config.Host_IP[22]='\0';
    for(i=0;i<17;i++)
        WIFI_Alarm_Config.Subnet_Mask=buffer[i+49];
    WIFI_Alarm_Config.Subnet_Mask[16]='\0';
    for(i=0;i<17;i++)
        WIFI_Alarm_Config.Gateway=buffer[i+69];
    WIFI_Alarm_Config.Gateway[16]='\0';

    WIFI_Alarm_Config.Alarm_Start_H=(buffer[91]-'0')*10+buffer[92]-'0';
    WIFI_Alarm_Config.Alarm_Start_M=(buffer[100]-'0')*10+buffer[101]-'0';
    WIFI_Alarm_Config.Alarm_End_H=(buffer[109]-'0')*10+buffer[110]-'0';
    WIFI_Alarm_Config.Alarm_End_M=(buffer[118]-'0')*10+buffer[119]-'0';
    WIFI_Alarm_Config.Time_Interval=(buffer[125]-'0')*10000+(buffer[126]-'0')*1000+(buffer[127]-'0')*100+(buffer[128]-'0')*10+buffer[129]-'0';

    printf("%s\n",WIFI_Alarm_Config.Local_IP);
    printf("%s\n",WIFI_Alarm_Config.Host_IP);
    printf("%s\n",WIFI_Alarm_Config.Subnet_Mask);
    printf("%s\n",WIFI_Alarm_Config.Gateway);

    printf("%d\n",WIFI_Alarm_Config.Alarm_Start_H);
    printf("%d\n",WIFI_Alarm_Config.Alarm_Start_M);
    printf("%d\n",WIFI_Alarm_Config.Alarm_End_H);
    printf("%d\n",WIFI_Alarm_Config.Alarm_End_M);

    printf("%d\n",WIFI_Alarm_Config.Time_Interval);

    return 0;
}


(原文件名:4.JPG)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表