忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 14207 | 回复: 8

关于QUSRJOBI取值后赋值的问题!!! [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-06-17 11:28 |显示全部楼层
本帖最后由 magic_007 于 2016-06-17 14:16 编辑

typedef _Packed struct Qwc_JOBI0100 {
     int  Bytes_Return;              
     int  Bytes_Avail;               
     char Job_Name[10];              
     char User_Name[10];            
     char Job_Number[6];            
     char Int_Job_ID[16];            
     char Job_Status[10];            
     char Job_Type[1];   
     char Job_Subtype[1];
     char Reserved[2];   
     int  Run_Priority;   
     int  Time_Slice;     
     int  Default_Wait;   
     char Purge[10];      
} Qwc_JOBI0100_t;

struct Qwc_JOBI0100 jobinfo;
char jobname[10] ;
char usrname[10] ;
char jobnum[6] ;  

QUSRJOBI(&jobinfo,
         sizeof(jobinfo),            
         "JOBI0100",                  
         "*                         ",
         "                ",         
         &error_code);               

DEBUG时看下面的变量的值:
jobinfo.Job_Name = "QPADEV0011XXXXXCXY  236173"
jobinfo.User_Name = "XXXXXCXY  236173"
jobinfo.Job_Number = "236173

------------------------------------------------------------------------------

我试了下面方法赋值:
strcpy(jobname,jobinfo.Job_Name) ;
memcpy(usrname,jobinfo.User_Name,sizeof(jobinfo.User_Name)) ;
memcpy(jobnum,jobinfo.Job_Number,sizeof(jobinfo.Job_Number)) ;
得到的结果:
jobname = "QPADEV0011XXXXXXXXXXXCXY  "
usrname = "XXXXXCXY  "
jobnum = "236173  "


memcpy(jobname,jobinfo.Job_Name,sizeof(jobinfo.Job_Name)) ;
memcpy(usrname,jobinfo.User_Name,sizeof(jobinfo.User_Name)) ;
memcpy(jobnum,jobinfo.Job_Number,sizeof(jobinfo.Job_Number)) ;
得到的结果:
jobname = "QPADEV0011"
usrname = "XXXXXCXY        236173  "
jobnum = "236173  "


我想要下面的结果:
jobname = "QPADEV0011"
usrname = "XXXXXCXY  "
jobnum = "236173  "
具体的赋值应该怎么写。。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-06-17 15:17 |显示全部楼层
用下面的方法赋值正确,还有别的么?
char *p ;
p = jobinfo.Job_Name ;        
for (i = 0 ; i<10 ; i++,p++ )
{                             
   *(jobname + i) = *p ;     
}                             
......

论坛徽章:
5
2015亚冠之阿尔艾因
日期:2015-08-10 02:23:34操作系统版块每日发帖之星
日期:2015-08-13 06:20:002015七夕节徽章
日期:2015-08-21 11:06:1715-16赛季CBA联赛之山西
日期:2016-04-13 02:36:59操作系统版块每日发帖之星
日期:2016-04-14 06:20:00
发表于 2016-06-17 22:15 来自手机 |显示全部楼层
首先你得知道c语言的字符串需要额外多一个字节放结束符\0的。。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-06-20 08:28 |显示全部楼层
pacman2000 发表于 2016-06-17 22:15
首先你得知道c语言的字符串需要额外多一个字节放结束符\0的。。。


memcpy也有这个要求么?

论坛徽章:
5
2015亚冠之阿尔艾因
日期:2015-08-10 02:23:34操作系统版块每日发帖之星
日期:2015-08-13 06:20:002015七夕节徽章
日期:2015-08-21 11:06:1715-16赛季CBA联赛之山西
日期:2016-04-13 02:36:59操作系统版块每日发帖之星
日期:2016-04-14 06:20:00
发表于 2016-06-20 09:44 来自手机 |显示全部楼层
赋值没问题,但是显示的时候是按遇到\0来结束显示的

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-06-20 16:11 |显示全部楼层
本帖最后由 magic_007 于 2016-06-20 16:12 编辑

memcpy(jobname,jobinfo.Job_Name,sizeof(jobinfo.Job_Name)) ;
memcpy(usrname,jobinfo.User_Name,sizeof(jobinfo.User_Name)) ;
memcpy(jobnum,jobinfo.Job_Number,sizeof(jobinfo.Job_Number)) ;
得到的结果:
jobname = "QPADEV0011"
usrname = "XXXXXCXY        236173  "
jobnum = "236173  "

为什么第一个和第三个赋值显示的结果是正确的,迷糊,虚心请教。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-06-21 11:24 |显示全部楼层
pacman2000 发表于 2016-06-17 22:15
首先你得知道c语言的字符串需要额外多一个字节放结束符\0的。。。

我知道字符串会多一个\0作为结束的,我只想知道,如何让3个值能对应赋值,用什么方法,求教!!

论坛徽章:
5
2015亚冠之阿尔艾因
日期:2015-08-10 02:23:34操作系统版块每日发帖之星
日期:2015-08-13 06:20:002015七夕节徽章
日期:2015-08-21 11:06:1715-16赛季CBA联赛之山西
日期:2016-04-13 02:36:59操作系统版块每日发帖之星
日期:2016-04-14 06:20:00
发表于 2016-06-21 22:54 |显示全部楼层
magic_007 发表于 2016-06-21 11:24
我知道字符串会多一个\0作为结束的,我只想知道,如何让3个值能对应赋值,用什么方法,求教!!


那你在定义变量的时候把\0的空间留上。。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-06-22 08:54 |显示全部楼层
pacman2000 发表于 2016-06-21 22:54
那你在定义变量的时候把\0的空间留上。。。


char jobname[11] ;
char usrname[11] ;
char jobnum[7] ;  
对么? 但是结果还是和以前一样。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票7.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP