Since pointer arithmetic is performed in terms of object size, you want to
do the arithmetic on a char pointer because sizeof(char) is guaranteed to be
1.
So replace your statement
ASXB=ASCB+0x6c;
with
ASXB=(int*)((char*)ASCB+0x6c);
which means
convert the type of the address in ASCB to a character pointer (value is
unchanged as is the contents of ASCB)
add the desired offset (sum is still a character pointer)
convert the sum to an integer pointer
store the result
> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:[email protected]] On
> Behalf Of Barkow, Eileen
> Sent: Thursday, February 08, 2018 8:06 AM
> To: [email protected]
> Subject: Silly C problem adding hex 6C
>
> I am still trying to crawl my way around C/C++ and am just trying to do
one simple thing:
> add value 0X6C to a pointer address (which was originally supplied by this
list as a means
> to get the jobname).
> something gets added to the pointer but it is not 0x6c.
> i tried all different combinations of char *; int *; void *; adding
decimal 108; but still get
> the same thing.
>
> My little program correctly picks up the address of a valid ASCB
(00FCAA00) from the
> PSA.
> Now I just want to point to the address at 00FCAA6C which is a pointer to
the ASXB
> which contains the jobname at offset 0XC0.
>
> But somehow I cannot add 6C to the ASCB pointer FCAA00 and get the ASXB
pointer at
> FCAA6C.
> Instead I get FCABB0 (or some other address depending on which ASCB is
obtained).
> Can some C guru please tell me what I am doing wrong?
>
> i will post the program and results - this is running on UNIX/OMVS.
>
>
> MVSZ MVSZ - Storage Contents : ACSCEXB -- (00FCAA00,,SQA)
-------------------
> Command ===> Scroll ===>
PAG
>
> Address Offset 0-1-2-3- 4-5-6-7- 8-9-A-B- C-D-E-F-
0---4---8---C---
> 00FCAA00 +0 C1E2C3C2 00FBC100 00FCAB80 00000000 |
ASCB..A...¿Ø.... |
> 00FCAA10 +10 00000000 00000000 00000000 00000000 |
................ |
> 00FCAA20 +20 000002E4 00780000 000100FF 00000000 |
...U.Ì.......... |
> 00FCAA30 +30 7FF19E00 00000000 19A77000 00000000 |
"1Æ......xø..... |
> 00FCAA40 +40 00000000 00308F46 D3DC5674 8B346008 |
......±ãLüîÈ».-. |
> 00FCAA50 +50 00000000 00000000 00000000 00000000 |
................ |
> 00FCAA60 +60 00AFF158 FFFF8F80 00000000 00AFD000 |
.®1ì..±Ø.....®}. |
> 00FCAA70 +70 1D171020 00000000 00000000 00AFD520 |
.............®N. |
> 00FCAA80 +80 00000000 00000000 80AFFF98 40000000 | ........Ø®.q
... |
>
> result running jn2
> $ jn2
> ASCB = FCAA00
> ASXB = FCABB0
> $
>
> jn2.c program
>
> #define _XOPEN_SOURCE
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <errno.h>
> #include <stdint.h>
> #include <iostream.h>
> int main(int argc, char *argv[])
> {
> int *PSA;
> int *ASCB;
> int *ASXB;
> char jobname[9];
> PSA=(int *)0x224; /* address of PSAAOLD */
> ASCB=(int *)*PSA;
> printf("ASCB = %X\n",ASCB);
> ASXB=ASCB+0x6c;
> printf("ASXB = %X\n",ASXB);
> }
>
> to compile:
> c++ -+ -c -o jn2.o -I/u/eileen/j16/cons \
> -I/usr/lpp/java/J8.0_64/include \
> -W"c,lp64,dll,xplink,langlvl(longlong,nullptr)" jn2.c
>
> to link:
> c++ \
> -W l,AMODE=64,lp64,LET=4,xplink,dynam=dll,case=mixed \
> -I=CELQS003.x \
> -o jn2 \
> linkmods/CELQSTRT.o \
> linkmods/CEESTART.o \
> linkmods/CELQSG03.o \
> linkmods/CELQINPL.o \
> linkmods/CELQETBL.o \
> linkmods/CELQLLST.o \
> linkmods/CELQBST.o \
> linkmods/CELQTRM.o \
> jn2.o
>
>
>
> ________________________________
>
> This e-mail, including any attachments, may be confidential, privileged or
otherwise legally
> protected. It is intended only for the addressee. If you received this
e-mail in error or from
> someone who was not authorized to send it to you, do not disseminate, copy
or otherwise
> use this e-mail or its attachments. Please notify the sender immediately
by reply e-mail and
> delete the e-mail from your system.
>
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to [email protected] with the message: INFO IBM-MAIN
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN