VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 672|回复: 8

令人不解的问题

[复制链接]

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-25 15:40:01 | 显示全部楼层 |阅读模式
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"time.h"

#define MAX_PKT 1024

#define MAX_SEQ 7

typedef enum {FALSE, TRUE} boolean;

typedef unsigned int seq_nr;

typedef enum  {dat, ack, nak} frame_kind;

typedef enum event_type {timeout, frame_arrival};

typedef struct
{        frame_kind kind;
        seq_nr seq;
        seq_nr ack;
        char info[1024];
} frame;

void from_network_layer(frame *fra)
{               
        printf("输入信息:");
        memset(fra->info, 0, strlen(fra->info));
        for(int i = 0; ; i++)
        {
                fra->info[i] = getchar();
                if ('\n' == fra->info[i])
                {
                        fra->info[++i] = '\0';
                        break;
                }
        }
}

void to_physical_layer(frame *fra)
{       
        FILE *fp1;
        char buf[1024];
        char temp;
        memset(buf, 0 ,strlen(buf));
        switch(fra->kind)
        {
                case dat:
                        strcpy(buf, "dat");
                        break;
                case ack:
                        strcpy(buf, "ack");
                        break;
                case nak:
                        strcpy(buf, "nak");
                        break;
        }
        itoa(fra->ack, &temp, 10);
        strcat(buf, &temp);

        itoa(fra->seq, &temp, 10);
        strcat(buf, &temp);

        strcat(buf, fra->info);
//        strcat(buf, '/0');
        if(0 == (fp1= fopen("d:\\a.txt","r")))
        {
                printf("文件创建失败");
                fclose(fp1);
        }
        else
        {
                fwrite(buf, 1, 1024, fp1);
                fclose(fp1);
        }
        printf("success");
}

event_type  wait_for_event()
{       
      return frame_arrival;
}
void main()
{
        seq_nr ack = 0;
        frame send, rev;
        event_type event;
        from_network_layer(&send);
        send.kind = dat;
        send.ack = 0;
        send.seq = 0;
        to_physical_layer(&send);
         event = wait_for_event();
}
一调试到WAIT_FOR_EVENT()RETURN就显示UNHANDLED EXCEPTION,如果把TO_PHYSICAL_LAY()屏蔽就能正常返回,高手来指点下,小弟先谢谢了!
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-2-20 22:15:01 | 显示全部楼层
memset(buf, 0 ,sizeof(buf));
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-2-22 16:30:01 | 显示全部楼层
char temp[16];
.....
itoa(fra->ack, temp, 10);
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-2-22 18:00:01 | 显示全部楼层
printf("文件创建失败");
//fclose(fp1); 這個close去掉

還有上面那些itoa全部改一下
回复

使用道具 举报

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-3-9 16:15:01 | 显示全部楼层
谢谢,再请教下这些问题你是怎样发现的?
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-3-11 09:45:01 | 显示全部楼层
printf一下buf的内容
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-3-11 10:45:01 | 显示全部楼层
還有fopen “wb”
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-3-11 17:15:01 | 显示全部楼层
memset没有见过用strlen的,而且还是初始化用strlen,要不就用strcpy()
fp1文件创建失败,肯定不会用到fclose(fp1);

至于itoa(fra->ack, &temp, 10);因为是静态分配char[16],所以&temp和temp是一样,指向分配空间的首地址,不改也可以
如果是malloc动态分配,&temp指向存放地址值的变量,就一定要用temp
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-12 19:30:02 | 显示全部楼层
char temp[16];
.....
itoa(fra->ack, temp, 10);

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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