尝试按字符复制字符串字符时出现问题

Problem trying to copy string char by char

我正在尝试一个字符一个字符地移动一个字符数组,并将其复制到另一个字符数组中,直到读取的字符为 \,因为我想创建地址的目录(如果未创建)或访问(如果已创建)。

例如:

Adress: dir2/dir3/a

我的算法:

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...

但是当我尝试访问路径时,我得到的是最后一个字符而不是所有路径字符串

输出:

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

我不知道是否有更有效的方法来执行此操作,我不知道如何获取完整的路径字符串而不是最后一个字符,我只是在末尾插入“\0”万一字符串结束字符有问题

name 和 path 是一个 char[256] 变量
代码:

for (i = 0; i < strlen(name); i++) 
        {
            if(name[i] != '/')
            {
                path[j] = name[i];
                path[i+1] = '[=13=]';
                printf("path%d: %s\n", i,path);
            }
            else
            {
                path[i] = '[=13=]';
                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;
            }

我想我找到了。

                path[i] = '[=10=]';

但路径是使用 j 作为索引器建立的。

                path[j] = '[=11=]';

应该是正确的。

并且您错过了 j 的增量:

                path[j] = name[i];
                path[i+1] = '[=12=]';

应该是:

                path[j++] = name[i];
                path[j+1] = '[=13=]';

有趣的是,实际上 使用 chdir() 一次完成一个组件的速度更快,但您找到它的可能性很小。当你深入到几百个目录时,你可以测量它。