尝试按字符复制字符串字符时出现问题
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()
一次完成一个组件的速度更快,但您找到它的可能性很小。当你深入到几百个目录时,你可以测量它。
我正在尝试一个字符一个字符地移动一个字符数组,并将其复制到另一个字符数组中,直到读取的字符为 \,因为我想创建地址的目录(如果未创建)或访问(如果已创建)。
例如:
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()
一次完成一个组件的速度更快,但您找到它的可能性很小。当你深入到几百个目录时,你可以测量它。