Home > Mobile >  Problem trying to copy string char by char
Problem trying to copy string char by char

Time:03-20

I'm trying to travel a char array char by char and copy it into another char array until the read character is \ because I want to create the directories of the adress if not created or access if they are created.

For example:

Adress: dir2/dir3/a

My algorithm:

path = dir2
//if dir2 not created make dir2 and change actual directory to dir2
//if created then access dir2 changing the actual directory to dir2
//empty path with memset and keep storing the adress
path = dir3
//repeat...

But when I try to access path I get the last character and not all the path string

Output:

path0: d
path1: i //Should be di
path2: r //Should be dir
path3: 2 //Should be dir2
path: 2 //Should be dir2

I don't know if there is a more efficient way to do this and I don't know how to get the complete path string and not the last character, I was inserting '\0' at the end just in case it was some problem with the string end character

name and path are a char[256] variable
Code:

for (i = 0; i < strlen(name); i  ) 
        {
            if(name[i] != '/')
            {
                path[j] = name[i];
                path[i 1] = '\0';
                printf("path%d: %s\n", i,path);
            }
            else
            {
                path[i] = '\0';
                printf("path: %s\n", path);
                n = chdir(path);
                if(n == ENOENT)
                {
                    n = mkdir(path, 0777);
                    if (n != 0) 
                    {
                        fprintf(stderr, "Failed to make the directory to extract: %s\n", strerror(errno));
                        close(fmypack);
                        return E_DIR1;
                    }
                    chdir(path);
                }
                else if(n == EACCES)
                {
                        fprintf(stderr, "Failed to access the directory: %s, %s\n", path, strerror(errno));
                        close(fmypack);
                        return E_DIR2;
                }
                else if(n != 0)
                {
                        fprintf(stderr, "Unknow error when try to access the directory: %s, %s\n", path, strerror(errno));
                        close(fmypack);
                        return E_DESCO;
                }
                memset(path, 0, sizeof path);
                j=0;
            }

CodePudding user response:

I think I found it.

                path[i] = '\0';

But path is built up using j as an indexer.

                path[j] = '\0';

Should be correct.

And you're missing your increment on j:

                path[j] = name[i];
                path[i 1] = '\0';

Should be:

                path[j  ] = name[i];
                path[j 1] = '\0';

What's funny is it actually is faster to do this one component at a time with chdir(), but the probability that you have found this is remote. When you get a couple hundred directories deep you can measure it.

  • Related