Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Directories constructed as a tree in C

Name: Anonymous 2013-10-30 13:11



#include<stdio.h>
#include <string.h>
int main()
{
 /*The output file*/
FILE *fo;

/*The input file*/
FILE *fi;

/*The current character we are on*/
char c[2];
c[1]=0;

/*The array to build the word we are on*/
char *s=malloc(900000);

/* Opens the file for reading */
fi=fopen("d.txt","r");
c[0]=getc(fi);
/* While loop responsible for reading current character,
 creating the string of directories linked to that character
 , and placing the word at the end*/
while(c[0]!=EOF)
{
strcat(s,"lib\\");
/*While loop that checks the current char for a space or a newline*/
    while((c[0]!=' '&&c[0]!='\n'))
    {


       strcat(s,c);

    strcat(s,"\\");
 c[0]=getc(fi);
    }
    printf(s);
    /*Makes the directory following the string of characters (IE: Character would be c\h\a\r\a\c\t\e\r)*/
    mkdir(s);

    s=malloc(9000);
c[0]=getc(fi);

}


return 0;
}

The new problem that I am encountering is most likely due to my allocation of memory, as when I get to the printf statement that prints out the composed string, I get lib\a\a\r\d\v\a\r\k\% where the % sign represents any ascii character, selected at random(probably due to some data that was at the ending of the string). How do I fix this problem?

Name: Cudder !MhMRSATORI!fR8duoqGZdD/iE5 2013-11-06 7:42

WTF are you trying to do here? Are you sure you need an O(n) algorithm when it could be done in O(1)?

If all you want is to create nested directories based on characters of a string, then

1. If you already have the string in memory:
void mkdurr(char *s) {
 char c;
 while(c = *s) {
  *(s+1) = 0;
  mkdir(s);
  *++s = c;
 }
}


2. If your string is coming from input:
void mkdurr() {
 char cs[2] = " ";
 int c;
 int l = 0;
 while((c=fgetc(in))!=EOF) {
  cs[0] = c;
  mkdir(cs);
  chdir(c);
  l++;
 }
 while(l--)
  chdir("..");
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List