K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>こんな感じかなぁ? >要素追加しちゃったけど。 >---- > >#include <stdio.h> >#include <stdlib.h> >#include <string.h> > >typedef struct{ > int itemCount; > char cString[50]; > char **cpItem; >} typChangePrm; > >typChangePrm *CreatePrm( char *cString, int itemCount) >{ > typChangePrm *prm = NULL; > int i; > > if ( (prm = malloc( sizeof( typChangePrm))) == NULL) { > fprintf(stderr,"ERROR: memory allocation\n"); > goto LERROR; > } > > if ( strlen( cString) >= 50 ) return NULL; > strcpy( prm->cString, cString); > > prm->itemCount = itemCount; > if ( (prm->cpItem = malloc( sizeof(char *) * itemCount )) == NULL) { > fprintf(stderr,"ERROR: memory allocation\n"); > goto LERROR; > } > > for ( i=0; i<itemCount; i++) prm->cpItem[i] = NULL; > return prm; > LERROR: > free( prm->cpItem); > free( prm); > return NULL; >} > >void PrmDestroy( typChangePrm *prm) >{ > int i; > > for ( i=0; i<prm->itemCount; i++) > free(prm->cpItem); > free(prm->cpItem); > free(prm); >} > >void PrmResize( typChangePrm *prm, int itemCount) >{ > char **tmp; > int i; > > if ( prm->itemCount >= itemCount ) { > for ( i=itemCount; prm->i<itemCount; i++) > free( prm->cpItem[i]); > prm->itemCount = itemCount; > return; > } > tmp = prm->cpItem; > if ( (tmp = realloc( tmp, sizeof(char *) * itemCount)) == NULL) { > fprintf(stderr,"ERROR: memory allocation\n"); > goto LERROR; > } > prm->cpItem = tmp; > for ( i=prm->itemCount; i<itemCount; i++) prm->cpItem[i] = NULL; > prm->itemCount = itemCount; > return; > LERROR: > free( prm->cpItem); >} > >void PrmSetItem( typChangePrm *prm, int item_no, char *item) >{ > if ( item_no >= prm->itemCount) return; > if ( (prm->cpItem[ item_no] = strdup( item)) == NULL) > fprintf(stderr,"ERROR:memory allocation\n"); >} > >void PrmShow( typChangePrm *prm) >{ > int i; > > printf("********************************\n"); > printf("Item Count:%d\n",prm->itemCount); > printf("cString :%s\n",prm->cString); > for ( i=0; i<prm->itemCount; i++) > printf("Item[%d]:%s\n",i,((prm->cpItem[i]==NULL)?"NULL":prm->cpItem[i])); >} > >int main(void) >{ > typChangePrm *prm; > char *item[] = { "hello", "world", "program"}; > > if ( (prm = CreatePrm("c-string",2)) == NULL) return 1; > PrmSetItem(prm,0,item[0]); > PrmSetItem(prm,1,item[1]); > PrmShow( prm); > > PrmResize( prm, 3); > PrmSetItem(prm,2,item[2]); > PrmShow( prm); > > PrmResize( prm, 1); > PrmShow( prm); > > PrmDestroy(prm); > return 0; >}
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!