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]
|
|