보시면 아시겠지만 파싱입니다. 제가 여쭤보고싶은건 빨간색으로 표시했습니다.

CODES 부분이 지금 char codes[CODES] 부분에 들어있습니다.

들어있는 내용은 예를들어 150010301810270C10393C101E00103018102A0C1039

지금은 이렇게 char 형이 들어있어서 int 형으로 변환해서 출력하려고 합니다.

그래서 change(char형 코드배열, int형 코드배열) 함수 생성한 뒤

함수에서 형변환을 마치고 리턴 값은 int형으로 받아서

fprintf("%d", int 코드배열)로 하려고하는데 지금 제 소스에서는 segmentation fault 가 발생하네요

혹시 해결할 수 있는 분 있나요 ? ? ? 정해진 방법없습니다.ㅋㅋㅋ

개인적으로 함수를 쓰고싶다는. . . ..

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#define LINESIZE 80
#define TAG 1
#define PROGRAMNAME 6
#define ADDR 6
#define SIZE 6

#define LENGTH 2
#define CODES 60

#define LABELSIZE 9
#define OTHERS 60

int change(char *s, int *i);

int main(int argc, char *argv[]) {
char cline[LINESIZE];
char tag[TAG];
char programname[PROGRAMNAME];
char addr[ADDR];
char size[SIZE];

char length[LENGTH];

char label[LABELSIZE];
char others[OTHERS];

char *cptr = NULL;
FILE *rfd, *wfd;


char codes[CODES];
int ch_int[CODES];
int i = 0;

rfd=fopen(argv[1],"r");
wfd=fopen(argv[2],"w");

while(fgets(cline, LINESIZE, rfd) > 0) {
cptr = cline;
if(*cline == 'H') {
strncpy(programname,cptr+TAG,PROGRAMNAME);
programname[PROGRAMNAME]='\0';

cptr = cline+TAG+PROGRAMNAME;

strncpy(addr,cptr,ADDR);
addr[ADDR]='\0';

cptr = cline+TAG+PROGRAMNAME+ADDR;

strncpy(size,cptr,SIZE);
size[SIZE]='\0';

fprintf(wfd,"TAG : %c, PROGRAM NAME : %s, ADDR : %s, SIZE : %s", *cline, programname, addr, size);
if(size[strlen(size)-1] != '\n') {
fprintf(wfd,"\n");
}
}
else if(*cline == 'T') {
strncpy(addr,cptr,ADDR);
addr[ADDR]='\0';

cptr = cline+TAG+ADDR;

strncpy(length,cptr,LENGTH);
length[LENGTH] ='\0';

cptr = cline+TAG+ADDR+LENGTH;

strncpy(codes,cptr,CODES);
codes[CODES] ='\0';

cptr = cline+TAG+ADDR+LENGTH+CODES;

fprintf(wfd,"TAG : %c, ADDR : %s, LENGTH : %s, CODES : T%x", *cline, addr, length,change(codes, ch_int));


if(size[strlen(size)-1] != '\n') {
fprintf(wfd,"\n");
}
}
else if(*cline == 'M' || *cline == 'E') {
strncpy(addr,cptr,ADDR);
addr[ADDR]='\0';

cptr = cline+TAG+ADDR;

strncpy(length,cptr,LENGTH);
length[LENGTH] ='\0';

cptr = cline+TAG+ADDR+LENGTH;

strncpy(codes,cptr,CODES);
codes[CODES] ='\0';

cptr = cline+TAG+ADDR+LENGTH+OTHERS;

fprintf(wfd,"TAG : %c, ADDR : %s, LENGTH : %s, OTHERS : %s", *cline, addr, length, codes);
if(size[strlen(size)-1] != '\n') {
fprintf(wfd,"\n");
}
}
strcpy(programname, " ");
strcpy(addr, " ");
strcpy(size, " ");
strcpy(codes, " ");
}
fclose(rfd);
fclose(wfd);
return 0;
}

int change(char *s, int *i)
{
int *ii = NULL;
ii = i;

while(s != NULL) {

if(*s >= 48 && *s <= 57) {
*i = *s - 48;
}
else if(*s >= 65 && *s <= 70) {
*i = *s - 55;
}
*s++;
*i++;
}
i = ii;
return *i;
}