[ create a new paste ] login | about

Link: http://codepad.org/ckEchaCF    [ raw code | output | fork ]

JfirKvmLSsanzoiDIwo - C, pasted on Apr 7:
#include <stdio.h>
#include <stdlib.h>

typedef struct tagDATA{
	int val;
	char* str;
} DATA;

void initDATA( DATA* d ){d->val=0; d->str=0;}

DATA* newDATA( void ){ DATA* r=malloc(sizeof(DATA)); initDATA(r); return(r); }

int write_strDATA( DATA* d, char* s ){
	if(d->str==0){
		char* src=s;
		int l=0; while(*src++!=0){l++;}
		d->str=(char*)malloc(sizeof(char)*(l+1));
		
		char* dst=d->str; src=s;
		while(l-->0){*dst++=*src++;} *dst=0;

		return(0);
	}
	else{
		free(d->str); d->str=0;
		return( write_strDATA(d,s) );
	}
}

int freeDATA( DATA* d ){
	if(d!=0){
		free(d->str); free(d); d->str=0; return(0);
	}
	else{ return(-1); }
}

int printDATA( DATA* d ){ return( puts(d->str) ); }





//test code

void dp(DATA* d){
	printf( "DATA address = [%p]\n", d);
	printf( "DATA.val address = [%p]\n", &(d->val));
	
	int i=0; char* p=d->str; while(*p!=0){
		printf( "DATA.str[%d] address = [%p], value = \'%c\',[%d]\n", i, p, *p, *p); i++; p++;
	}
	printf( "DATA.str[%d] address = [%p], value = \'%c\',[%d]\n", i, p, *p, *p);
}

void f1(DATA** d){
	*d=newDATA();
	write_strDATA(*d,"aiueo"); printDATA(*d); dp(*d);
	write_strDATA(*d,"kakikukeko"); printDATA(*d); dp(*d);
	freeDATA(*d); *d=0;
	
	*d=newDATA();
	write_strDATA(*d,"12345"); printDATA(*d); dp(*d);
	freeDATA(*d); *d=0;

	*d=newDATA();
	write_strDATA(*d,"!#$%&"); printDATA(*d); dp(*d);
}

void main(){
	DATA* d;
	f1(&d);
	printDATA(d); dp(d); freeDATA(d); d=0;
}


Output:
aiueo
DATA address = [0x804a078]
DATA.val address = [0x804a078]
DATA.str[0] address = [0x804a0a0], value = 'a',[97]
DATA.str[1] address = [0x804a0a1], value = 'i',[105]
DATA.str[2] address = [0x804a0a2], value = 'u',[117]
DATA.str[3] address = [0x804a0a3], value = 'e',[101]
DATA.str[4] address = [0x804a0a4], value = 'o',[111]
DATA.str[5] address = [0x804a0a5], value = '',[0]
kakikukeko
DATA address = [0x804a078]
DATA.val address = [0x804a078]
DATA.str[0] address = [0x804a0a0], value = 'k',[107]
DATA.str[1] address = [0x804a0a1], value = 'a',[97]
DATA.str[2] address = [0x804a0a2], value = 'k',[107]
DATA.str[3] address = [0x804a0a3], value = 'i',[105]
DATA.str[4] address = [0x804a0a4], value = 'k',[107]
DATA.str[5] address = [0x804a0a5], value = 'u',[117]
DATA.str[6] address = [0x804a0a6], value = 'k',[107]
DATA.str[7] address = [0x804a0a7], value = 'e',[101]
DATA.str[8] address = [0x804a0a8], value = 'k',[107]
DATA.str[9] address = [0x804a0a9], value = 'o',[111]
DATA.str[10] address = [0x804a0aa], value = '',[0]
12345
DATA address = [0x804a078]
DATA.val address = [0x804a078]
DATA.str[0] address = [0x804a0a0], value = '1',[49]
DATA.str[1] address = [0x804a0a1], value = '2',[50]
DATA.str[2] address = [0x804a0a2], value = '3',[51]
DATA.str[3] address = [0x804a0a3], value = '4',[52]
DATA.str[4] address = [0x804a0a4], value = '5',[53]
DATA.str[5] address = [0x804a0a5], value = '',[0]
!#$%&
DATA address = [0x804a078]
DATA.val address = [0x804a078]
DATA.str[0] address = [0x804a0a0], value = '!',[33]
DATA.str[1] address = [0x804a0a1], value = '#',[35]
DATA.str[2] address = [0x804a0a2], value = '$',[36]
DATA.str[3] address = [0x804a0a3], value = '%',[37]
DATA.str[4] address = [0x804a0a4], value = '&',[38]
DATA.str[5] address = [0x804a0a5], value = '',[0]
!#$%&
DATA address = [0x804a078]
DATA.val address = [0x804a078]
DATA.str[0] address = [0x804a0a0], value = '!',[33]
DATA.str[1] address = [0x804a0a1], value = '#',[35]
DATA.str[2] address = [0x804a0a2], value = '$',[36]
DATA.str[3] address = [0x804a0a3], value = '%',[37]
DATA.str[4] address = [0x804a0a4], value = '&',[38]
DATA.str[5] address = [0x804a0a5], value = '',[0]


Create a new paste based on this one


Comments: