#ifndef INPUT
#define INPUT
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 256
int ST_CONTINUE;
int LIM_STR;
void ADD_CHARACTER(int ch);
char *read_line(char *str);
char READ_ALL(char **str);
#endif
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 256
static int ST_LIM=0;
static int ST_USED=0;
static char *ST_BUFFER=NULL;
extern int ST_CONTINUE=1;
extern int LIM_STR=0;
void ADD_CHARACTER(int ch)
{
if(ST_USED==ST_LIM)
{
ST_BUFFER=realloc(ST_BUFFER,(sizeof(char*)*(SIZE+ST_LIM)));
ST_LIM+=SIZE;
}
ST_BUFFER[ST_USED++]=ch;
}
char *read_line(char *str)
{
char *temp=NULL;
int ch=0,i,j;
for(i=0;ch!=EOF&&ch!='\n';i++)
{
ST_USED=0;
for(j=0;;j++)
{
ch=getchar();
if(ch=='\n'||ch==EOF)
{
if(j==0||ch==EOF)ST_CONTINUE=0;
ADD_CHARACTER('\0');
break;
}
ADD_CHARACTER(ch);
}
//str=malloc(sizeof(char*)*ST_USED);??
temp=malloc(sizeof(char*)*SIZE);
strcpy(temp,ST_BUFFER);
//printf("#%d#",ST_CONTINUE);
}
return temp;
}
char **READ_ALL(char **str)
{
//char **str=NULL;
int i,j;
int ch=0;
int current=0;
char *buf=NULL;
for(LIM_STR=0;ST_CONTINUE==1;LIM_STR++){
if(current==LIM_STR){
str=malloc(sizeof(char*)*(current+SIZE));
current+=SIZE;
}
str[LIM_STR]=read_line(str[LIM_STR]);
//printf("#%s#",str[i]);
}
/* for(i=0;i<LIM_STR;i++)
printf("%s ",str[i]); */
return str;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"input.h"
int main(void)
{
char **str=NULL;
int i;
READ_ALL(str);
for(i=0;i<LIM_STR;i++)
printf("%s ",str[i]);
return 0;
}
ヘッダファイル、関数の実態?、メイン関数、という順番で載せています。
問題に気づいたのが最後のメイン関数の各入力文字の出力で、メイン関数内で、str(READ_ALLで読み込んだ文字列の集まり)を出力させるとエラーが出て、メイン関数内でなく、READ_ALL関数の最後(/**/の中)で出力させてると、問題なく出力に成功します、READ_ALL関数内で出力できて、メイン関数内で出力出来ないのはなぜなのですか?