פונקציה לפריסת include-ים - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

פונקציה לפריסת include-ים


iem

Recommended Posts

ניסיתי לחשוב על אלגוריתם לבעיה הבאה:

קלט: קובץ C.

פלט: אותו קובץ C רק שבמקום שורות בהן יש include הן יוחלפו בתוכן קובץ ה-include עצמו.

ניתן גם להניח שקובץ ה-C המקורי יהיה במבנה הבא: בתחילתו יש include-ים, רק לאחר מכן define-ים enum-ים ולאחר מכן void main.

בנוסף, התוכנית לא תעסוק ב:

קבצי include שקוראים בעצמם לקבצי include אחרים.

קריאות ל-include שאינן בתחילת קובץ ה-C.

חשבתי על כמה אלגוריתמים כמו מערך דינמי של מצביעים לקבצי ה-include שנוצר לאחר מעבר ראשון על הקובץ, ולאחר מכן פתיחת כל קובץ ופריסתו לקובץ החדש.

אבל אלגוריתם זה די מיותר בהתאם לדרישות השאלה ובמיוחד שאין include-ים משורשרים ולכן ניתן לבצע הכל במעבר ראשון.

אלגוריתם נוסף שחשבתי עליו הוא פשוט לחפש את הביטוי #include לאחר מכן לסרוק עד הגעה ל-

'"' || '<'

לאחר מכן לסרוק אות אחרי אות למערך דינמי זמני עד הגעה ל-

'"' || '>'

לאחר מכן לפתוח את שם הקובץ ששמרנו במערך, העתקת תוכנו לקובץ החדש וסגירתו. וכך לבצע עבור כל היתקלות ב- #include.

אני מרגיש שניתן לתפעל את התוכנית באלגוריתם קצר יותר אבל לא עולה לי בראש אחד כזה כרגע...

כתבתי את הקוד הבא לבדיקה אבל זה פשוט לא פותח את הקובץ החדש (אמור ליצור אותו) ולא עושה את העבודה.

הגדרת הפרמטרים הקודמים לשורות קוד אלו היא תקינה...


c=fgetc(c1_fp);
while (!feof(c1_fp)){

if (c=='#')
{
fgets(s_detect,8 ,c1_fp); /* 7 for "include" +1 for a '\0'*/
if (strcmp(s_detect , include_s) == 0)
{
while (((c=fgetc(c1_fp)) != '<') || (c!='"'))
{
c=fgetc(c1_fp);
}
for (i=0 ;(c=='>' )||(c=='"') ; i++)
{
my_header[i] = c;
c=fgetc(c1_fp);
header_length++;
}
my_header[i]='\0';

}/*while*/

c=fgetc(c1_fp);
}

for (j=0 ; j=='\0' ; j++)
printf("\n\nHeader file name is:%d",my_header[j]);

אשמח להצעות כי אני ממש שובר את הראש על זה. :nixweiss:

תודה !

קישור לתוכן
שתף באתרים אחרים

יש לך בעייה ב-while השני. אתה עושה פעמיים fgetc בכל איטרציה.

(יתכן שיש לך עוד בעיות, עדיין לא עברתי על כל הקוד)

חוץ מזה, למה אתה מדפיס בסוף את ה-header בתור מערך של מספרים, ולא בתור מחרוזת?

קישור לתוכן
שתף באתרים אחרים

התחלתי לחשוב יותר מסודר על משהו כמו:


void includes_extractor(FILE *c1_fp , char *c1_file_name ,c1_file_str_len )
{
FILE *c2_fp;
char *c2_file_name , ch;

c2_file_name=(char *) malloc ((c1_file_str_len)*sizeof(char));

c2_file_name[c1_file_str_len-1] = '\0';
c2_file_name[c1_file_str_len-2] = '2';

/*Open source file for read only + ERR check */

if( !(c1_fp = fopen (c1_file_name,"r") ) )
{
fprintf(stderr,"cannot open destination file !\n");
exit(0);
}

if( !(c2_fp = fopen (c2_file_name,"w+") ) )
{
fprintf(stderr,"cannot open destination file !\n");
exit(0);
}

/*start search for include files*/

ch=fgetc(c1_fp);
while (!feof(c1_fp))
{
if (ch == '#')
{
/*CODE HERE*/
}
ch=fgetc(c1_fp);
}/*while*/

}/*ext_inc*/

אז כתבתי את הקוד עד כאן, אבל יש כמה דברים שמטרידים אותי לפני שאני משלים את הלולאה, שהיא למעשה כל הפעולה המעשית כאן.

האם הסינטקס בקבלת הפרמטרים לפונק' והשימוש בהם נכון, ואיך הכי נכון לקרוא את ה-include שאמור לבוא ? כי בעיקרון יכול להיות define אבל בו אני לא מטפל בקובץ הנוכחי.

האם לעשות fgets נניח ל-80 תווים (בהנחה ששורה היא מקסימום 80 תווים) ואז לבדוק את האיברים הבאים האם הם יהיו "include"? ואז לאחר מכן לקחת את שם הקובץ ולהמשיך משם? והאם fgets מוחקת רווחים ?

מה הצעד הנכון הבא ?

והאם בכלל אני צריך את ההקצאה הדינמית בפונק' אם הגודל נקבע ממקודם למעשה ?

תודה !

קישור לתוכן
שתף באתרים אחרים

מקפיץ :jump:

כתבתי את זה בסוף כפונקציה:


/*This func is a copy of *.c1 file, except of that every include was extracted*/
void includes_extractor(FILE *c1_fp , char *c1_file_name ,int c1_file_str_len )
{

int i=0,header_file_len;
FILE *c2_fp , *header_fp;
char *c2_file_name[c1_file_str_len] , ch, inc_name[]="include",*header_name;
char inc_chk[8]; /*[8] are 7 for "include" +1 for null*/

header_file_len=strlen(header_name);
header_name=(char *) malloc ((header_file_len)*sizeof(char));

c2_file_name[c1_file_str_len-1] = '\0';
c2_file_name[c1_file_str_len-2] = '2';

/*Open source & destination files + ERR check */

if( !(c1_fp = fopen (c1_file_name,"r") ) )
{
fprintf(stderr,"\ncannot open *.c1 file !\n");
exit(0);
}

if( !(c2_fp = fopen (c2_file_name,"w+") ) )
{
fprintf(stderr,"\ncannot open *.c2 file !\n");
exit(0);
}

/*next code lines are copy char by char from c1 to c2,
but if meet header file, copy its content */

ch=fgetc(c1_fp);
while (!feof(c1_fp))
{
if (ch == '#') /*potential #include occur*/
{
fgets(inc_chk, 8, c1_fp); /*8 places for "include" + null*/
if(strcmp(inc_chk,inc_name)==0) /*means we are in include case*/
{
ch=fgetc(c1_fp);
while(ch==' ') /*stop when head with a '<' or '"'*/
{
ch=fgetc(c1_fp);
} /*while(2)*/
ch=fgetc(c1_fp); /*start read header file name*/
while((ch!='"') || (ch!='>')) /*until we get end of header name*/
{
header_name[i] = ch;
i++;
ch=fgetc(c1_fp);
}/*while(3)*/
header_name[i]='\0'; /*close the header_name array*/

if( !(header_fp = fopen (header_name,"r") ) ) /*open *.h for read + ERR chk*/
{
fprintf(stderr,"cannot open header file !\n");
exit(0);
}
while (!feof(header_fp)) /*copy header file content to *.c2 file*/
{
ch=fgetc(header_fp);
fputc(ch,c2_fp);
}/*while(4)*/
fclose(header_fp);
}
}/*frst if*/
else
{
fputc(ch,c2_fp);
}
ch=fgetc(c1_fp);
}/*while(1)*/
fclose(c1_fp);
fclose(c2_fp);
}/*includes_extractor*/

שהיא למעשה חלק מהתוכנית הזאת: (שכן התקמפלה בפני עצמה ללא הפונקציה שלעיל).


#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

enum status {OUT , IN_STRING , LEFT_SLASH , IN_COMMENT , RIGHT_STAR , IN_CPP_COM};

/*functions declarations*/
void chk_correct_file_arg(char *s);
void chk_no_arg(int num);
void includes_extractor(FILE *c1_fp , char *c1_file_name ,int c1_file_str_len );

int main(int argc , char **argv)
{
FILE *c_fp , *c1_fp; /* fd -> *.c ; c1_fp -> *.c1 */
int ch;
int state = OUT;
int c1_file_string_len = strlen(argv[1])+2; /*num of chars in name.c +1 for name.c1*/
char *c1_file_name;

chk_correct_file_arg(argv[1]);
chk_no_arg(argc);

c1_file_name=(char *) malloc ((c1_file_string_len)*sizeof(char));

strcpy(c1_file_name , argv[1]);
c1_file_name[c1_file_string_len-1] = '\0';
c1_file_name[c1_file_string_len-2] = '1';

if( !(c_fp = fopen (argv[1],"r") ) )
{
fprintf(stderr,"cannot open source file !\n");
exit(0);
}

if( !(c1_fp = fopen (c1_file_name,"w+") ) )
{
fprintf(stderr,"cannot open destination file !\n");
exit(0);
}



ch=fgetc(c_fp);
while (!feof(c_fp)){

switch (state)
{
case OUT:
if (ch=='/')
{
state = LEFT_SLASH;
}
else
{
fputc(ch,c1_fp);
if (ch=='\"')
state = IN_STRING;
}
break; /*OUT*/

case LEFT_SLASH:
if(ch=='*')
{
state = IN_COMMENT;
}
else if (ch=='/')
{
state = IN_CPP_COM;
}
else
{
fputc('/',c1_fp);
fputc(ch,c1_fp);
state = OUT;
}
break; /*LEFT_SLASH*/

case IN_COMMENT:
if(ch=='*')
{
state = RIGHT_STAR;
}
break; /*IN_COMMENT*/

case IN_CPP_COM:
if(ch=='\n')
{
state = OUT;
fputc('\n',c1_fp);
}
break; /*IN_CPP_COM*/

case RIGHT_STAR:
if(ch=='/')
{
state = OUT;
}
else if (ch!= '*')
{
state = IN_COMMENT;
}
break; /*RIGHT_STAR*/

case IN_STRING:
if(ch=='\"')
{
state = OUT;
}
fputc(ch,c1_fp);
break; /*IN_STRING*/


} /*switch*/
ch=fgetc(c_fp);
} /*while*/
fclose(c_fp);
fclose(c1_fp);
return 0; /*dummy*/

includes_extractor(c1_fp , c1_file_name ,c1_file_string_len); /*extract all headers*/

} /*main()*/


/* This func validate that the data entered into argv[1] refer to a file type of *.c */
void chk_correct_file_arg(char *s)
{
int arg_len;
arg_len = strlen(s);
if( !( (s[arg_len] == '\0') && (s[arg_len-1] == 'c') && (s[arg_len-2] == '.') ))
{
printf("\n%s is an incorrect file name type !!\n\n",s);
exit(0);
}
} /*chk_correct_file_arg*/

/*This func validate that # of argv organs are exact 2*/
void chk_no_arg(int num_arg)
{
if (num_arg > 2)
{
printf("\nToo many arguments !\n\n Program will now terminate !");
exit(0);
}

if (num_arg == 1)
{
printf("\nMissing argument !\n\n Program will now terminate !");
exit(0);
}
}/*chk_no_arg*/

אבל אני עדיין מקבל אזהרות מהקומפיילר (אמנם לא שגיאות אבל עדיין) והתוכנית מייצרת קובץ ריצה ואת הקובץ ללא ההערות, אבל לא את הקובץ שהוא העתק של הקובץ עם ההערות רק שכל ה-includes פרוסים בו, עליו אחראית הפונק' includes_extractor.

קרעתי את עצמי 3 שעות על הפונקציה הזאת ואני לא מוצא את הבעיה.... :'(

אני ממש חייב עזרה כאן... :nixweiss:

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

עריכה:

הגדרתי דינמית, וקימפלתי ללא error אחד או אפילו warning אחד ולמרות זאת הוא לא מייצר לי את name.c2 אלא רק את name.c1.


void includes_extractor(FILE *c1_fp , char *c1_file_name ,int c1_file_str_len )
{

int i=0,header_file_len=0;
FILE *c2_fp , *header_fp;
char *c2_file_name, ch, inc_name[]="include",*header_name;
char inc_chk[8]; /*[8] are 7 for "include" +1 for null*/

header_name=(char *) malloc ((header_file_len)*sizeof(char));

c2_file_name=(char *) malloc ((c1_file_str_len)*sizeof(char));
c2_file_name[c1_file_str_len-1] = '\0';
c2_file_name[c1_file_str_len-2] = '2';

/*Open source & destination files + ERR check */

if( !(c1_fp = fopen (c1_file_name,"r") ) )
{
fprintf(stderr,"\ncannot open *.c1 file !\n");
exit(0);
}

if( !(c2_fp = fopen (c2_file_name,"w+") ) )
{
fprintf(stderr,"\ncannot open *.c2 file !\n");
exit(0);
}

/*next code lines are copy char by char from c1 to c2,
but if meet header file, copy its content */

ch=fgetc(c1_fp);
while (!feof(c1_fp))
{
if (ch == '#') /*potential #include occur*/
{
fgets(inc_chk, 8, c1_fp); /*8 places for "include" + null*/
if(strcmp(inc_chk,inc_name)==0) /*means we are in include case*/
{
ch=fgetc(c1_fp);
while(ch==' ') /*stop when head with a '<' or '"'*/
{
ch=fgetc(c1_fp);
} /*while(2)*/
ch=fgetc(c1_fp); /*start read header file name*/
while((ch!='"') || (ch!='>')) /*until we get end of header name*/
{
header_name[i] = ch;
i++;
ch=fgetc(c1_fp);
}/*while(3)*/
header_name[i]='\0'; /*close the header_name array*/
header_file_len=strlen(header_name);
if( !(header_fp = fopen (header_name,"r") ) ) /*open *.h for read + ERR chk*/
{
fprintf(stderr,"cannot open header file !\n");
exit(0);
}
while (!feof(header_fp)) /*copy header file content to *.c2 file*/
{
ch=fgetc(header_fp);
fputc(ch,c2_fp);
}/*while(4)*/
fclose(header_fp);
}
}/*frst if*/
else
{
fputc(ch,c2_fp);
}
ch=fgetc(c1_fp);
}/*while(1)*/
fclose(c1_fp);
fclose(c2_fp);
}/*includes_extractor*/

אפשר רמז איפה השגיאה שגורמת לקובץ לא להיווצר ?

קישור לתוכן
שתף באתרים אחרים

שיניתי (ערכתי לפני שראיתי את התגובה האחרונה שלך) את הפונק' בהתאם, מתקמפל מושלם אבל לא יוצר את הקובץ המבוקש משום מה... :nixweiss:

העניין שגם אם הקובץ לא היה נוצר, הוא היה צריך לפחות להדפיס הודעה מתאימה מההודעות שהזנתי לו, אבל הוא לא מדפיס כלום..

קישור לתוכן
שתף באתרים אחרים

קודם כל, דבר חשוב מאוד: אם מקצים באמצעות malloc, חייבים לשחרר אותו באמצעות free בסוף השימוש!

יש לך אותה טעות כמו שהייתה לך פעם - איפה אתה מעתיק את שם הקובץ לתוך c2_file_name?

חוץ מזה, לא הבנתי למה אתה מעביר את c1_fp כארגומנט לפונקציה אם גם ככה אתה דורס אותו באמצעות fopen.

קישור לתוכן
שתף באתרים אחרים

לא הבנתי למה אתה מעביר את c1_fp כארגומנט לפונקציה אם גם ככה אתה דורס אותו באמצעות fopen.

אחרת הוא ייתן לי הודעת c1_fp undeclared משום מה...

שיניתי את הפונקציה:


void includes_extractor(FILE *c1_fp , char *c1_file_name ,int c1_file_str_len )
{

int i=0,header_file_len=0;
FILE *c2_fp , *header_fp;
char *c2_file_name, ch, inc_name[]="include",*header_name;
char inc_chk[8]; /*[8] are 7 for "include" +1 for null*/

header_name=(char *) malloc ((header_file_len)*sizeof(char));
c2_file_name=(char *) malloc ((c1_file_str_len)*sizeof(char));

strcpy(c2_file_name , c1_file_name); /*<<<<<<<<<<< I CHANGED HERE*/


c2_file_name[c1_file_str_len-1] = '\0';
c2_file_name[c1_file_str_len-2] = '2';

/*Open source & destination files + ERR check */

if( !(c1_fp = fopen (c1_file_name,"r") ) )
{
fprintf(stderr,"\ncannot open *.c1 file !\n");
exit(0);
}

if( !(c2_fp = fopen (c2_file_name,"w+") ) )
{
fprintf(stderr,"\ncannot open *.c2 file !\n");
exit(0);
}

/*next code lines are copy char by char from c1 to c2,
but if meet header file, copy its content */

ch=fgetc(c1_fp);
while (!feof(c1_fp))
{
if (ch == '#') /*potential #include occur*/
{
fgets(inc_chk, 8, c1_fp); /*8 places for "include" + null*/
if(strcmp(inc_chk,inc_name)==0) /*means we are in include case*/
{
ch=fgetc(c1_fp);
while(ch==' ') /*stop when head with a '<' or '"'*/
{
ch=fgetc(c1_fp);
} /*while(2)*/
ch=fgetc(c1_fp); /*start read header file name*/
while((ch!='"') || (ch!='>')) /*until we get end of header name*/
{
header_name[i] = ch;
i++;
ch=fgetc(c1_fp);
}/*while(3)*/
header_name[i]='\0'; /*close the header_name array*/
header_file_len=strlen(header_name);
if( !(header_fp = fopen (header_name,"r") ) ) /*open *.h for read + ERR chk*/
{
fprintf(stderr,"cannot open header file !\n");
exit(0);
}
while (!feof(header_fp)) /*copy header file content to *.c2 file*/
{
ch=fgetc(header_fp);
fputc(ch,c2_fp);
}/*while(4)*/
fclose(header_fp);
}
}/*frst if*/
else
{
fputc(ch,c2_fp);
}
ch=fgetc(c1_fp);
}/*while(1)*/
fclose(c1_fp);
fclose(c2_fp);
free (header_name);
free (c2_file_name);
}/*includes_extractor*/

מתקמפל סבבה, אבל לא יוצר לי את *.c2 למרות הכל... :nixweiss:

קישור לתוכן
שתף באתרים אחרים

שמת לב שב-main שלך אתה קורא ל-includes_extractor אחרי ה-return?

:kopfpatsch: איך לא שמתי לב...

עכשיו הוא זורק הודעה שהוא לא יכול לפתוח את *.c1 האם אני צריך להשאיר את c1 פתוח ? לא נראה לי... אין מניעה שאני אסגור ואפתח אותו שוב בפונק' לא ?! אני פשוט לא רוצה שה-c1_fp לא יהיה בתחילת הקובץ, למרות שמצד שני אני יכול להביא אותו לתחילת הקובץ אבל אין צורך נכון ? מה עכשיו לא טוב?, עברתי על הקוד כמה וכמה פעמים. :nixweiss:

קישור לתוכן
שתף באתרים אחרים

אין מניעה שתפתח ותסגור אותו שוב ושוב, השאלה היא למה אתה רוצה לעשות את זה. כמובן, אם בהתחלה אתה רוצה לכתוב אליו ואחר כך אתה רוצה לקרוא ממנו, ברור שתצטרך לסגור ולפתוח אותו מחדש (כי בפעם הראשונה אתה פותח אותו לכתיבה, ובפעם השנייה לקריאה).

קישור לתוכן
שתף באתרים אחרים

סבבה, אז אין מניעה במה שעשיתי...

למה הוא בכל זאת עושה לי בעיה בפתיחה של הקובץ ?

זאת הפונקציה המתוקנת:


void includes_extractor(FILE *c1_fp, char *c1_file_name ,int c1_file_str_len )
{

int i=0,header_file_len=0;
FILE *c2_fp , *header_fp;
char *c2_file_name, ch, inc_name[]="include",*header_name;
char inc_chk[8]; /*[8] are 7 for "include" +1 for null*/

header_name=(char *) malloc ((header_file_len)*sizeof(char));
c2_file_name=(char *) malloc ((c1_file_str_len)*sizeof(char));

strcpy(c2_file_name , c1_file_name); /*<<<<<<<<<<< I CHANGED HERE*/


c2_file_name[c1_file_str_len-1] = '\0';
c2_file_name[c1_file_str_len-2] = '2';

/*Open source & destination files + ERR check */

if( !(c1_fp = fopen (c1_file_name,"r") ) )
{
fprintf(stderr,"\ncannot open *.c1 file !\n");
exit(0);
}

if( !(c2_fp = fopen (c2_file_name,"w+") ) )
{
fprintf(stderr,"\ncannot open *.c2 file !\n");
exit(0);
}

/*next code lines are copy char by char from c1 to c2,
but if meet header file, copy its content */

ch=fgetc(c1_fp);
while (!feof(c1_fp))
{
if (ch == '#') /*potential #include occur*/
{
fgets(inc_chk, 8, c1_fp); /*8 places for "include" + null*/
if(strcmp(inc_chk,inc_name)==0) /*means we are in include case*/
{
ch=fgetc(c1_fp);
while(ch==' ') /*stop when head with a '<' or '"'*/
{
ch=fgetc(c1_fp);
} /*while(2)*/
ch=fgetc(c1_fp); /*start read header file name*/
while((ch!='"') || (ch!='>')) /*until we get end of header name*/
{
header_name[i] = ch;
i++;
ch=fgetc(c1_fp);
}/*while(3)*/
header_name[i]='\0'; /*close the header_name array*/
header_file_len=strlen(header_name);
if( !(header_fp = fopen (header_name,"r") ) ) /*open *.h for read + ERR chk*/
{
fprintf(stderr,"cannot open header file !\n");
exit(0);
}
while (!feof(header_fp)) /*copy header file content to *.c2 file*/
{
ch=fgetc(header_fp);
fputc(ch,c2_fp);
}/*while(4)*/
fclose(header_fp);
}
}/*frst if*/
else
{
fputc(ch,c2_fp);
}
ch=fgetc(c1_fp);
}/*while(1)*/
fclose(c1_fp);
fclose(c2_fp);
free (header_name);
free (c2_file_name);
}/*includes_extractor*/

וזאת התוכנית המתוקנת:


#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

enum status {OUT , IN_STRING , LEFT_SLASH , IN_COMMENT , RIGHT_STAR , IN_CPP_COM};

/*functions declarations*/
void chk_correct_file_arg(char *s);
void chk_no_arg(int num);
void includes_extractor(FILE *c1_fp, char *c1_file_name ,int c1_file_str_len );

int main(int argc , char **argv)
{
FILE *c_fp , *c1_fp; /* fd -> *.c ; c1_fp -> *.c1 */
int ch;
int state = OUT;
int c1_file_string_len = strlen(argv[1])+2; /*num of chars in name.c +1 for name.c1*/
char *c1_file_name;

chk_correct_file_arg(argv[1]);
chk_no_arg(argc);

c1_file_name=(char *) malloc ((c1_file_string_len)*sizeof(char));

strcpy(c1_file_name , argv[1]);
c1_file_name[c1_file_string_len-1] = '\0';
c1_file_name[c1_file_string_len-2] = '1';

if( !(c_fp = fopen (argv[1],"r") ) )
{
fprintf(stderr,"cannot open source file !\n");
exit(0);
}

if( !(c1_fp = fopen (c1_file_name,"w+") ) )
{
fprintf(stderr,"cannot open destination file !\n");
exit(0);
}



ch=fgetc(c_fp);
while (!feof(c_fp)){

switch (state)
{
case OUT:
if (ch=='/')
{
state = LEFT_SLASH;
}
else
{
fputc(ch,c1_fp);
if (ch=='\"')
state = IN_STRING;
}
break; /*OUT*/

case LEFT_SLASH:
if(ch=='*')
{
state = IN_COMMENT;
}
else if (ch=='/')
{
state = IN_CPP_COM;
}
else
{
fputc('/',c1_fp);
fputc(ch,c1_fp);
state = OUT;
}
break; /*LEFT_SLASH*/

case IN_COMMENT:
if(ch=='*')
{
state = RIGHT_STAR;
}
break; /*IN_COMMENT*/

case IN_CPP_COM:
if(ch=='\n')
{
state = OUT;
fputc('\n',c1_fp);
}
break; /*IN_CPP_COM*/

case RIGHT_STAR:
if(ch=='/')
{
state = OUT;
}
else if (ch!= '*')
{
state = IN_COMMENT;
}
break; /*RIGHT_STAR*/

case IN_STRING:
if(ch=='\"')
{
state = OUT;
}
fputc(ch,c1_fp);
break; /*IN_STRING*/


} /*switch*/
ch=fgetc(c_fp);
} /*while*/
fclose(c_fp);
fclose(c1_fp);
free(c1_file_name);
includes_extractor(c1_fp, c1_file_name ,c1_file_string_len); /*extract all headers*/
return 0; /*dummy*/



} /*main()*/


/* This func validate that the data entered into argv[1] refer to a file type of *.c */
void chk_correct_file_arg(char *s)
{
int arg_len;
arg_len = strlen(s);
if( !( (s[arg_len] == '\0') && (s[arg_len-1] == 'c') && (s[arg_len-2] == '.') ))
{
printf("\n%s is an incorrect file name type !!\n\n",s);
exit(0);
}
} /*chk_correct_file_arg*/

/*This func validate that # of argv organs are exact 2*/
void chk_no_arg(int num_arg)
{
if (num_arg > 2)
{
printf("\nToo many arguments !\n\n Program will now terminate !");
exit(0);
}

if (num_arg == 1)
{
printf("\nMissing argument !\n\n Program will now terminate !");
exit(0);
}
}/*chk_no_arg*/

רמז ? :silly: :s05:

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...