免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24315 | 回复: 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] ;  
对么? 但是结果还是和以前一样。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP