我目前有一个存储文件名的char数组。
eg. folder1/subfolder/subsubfolder/file1.txt
我希望能够删除此char数组中的第一个文件夹名称。所以它变成了
subfolder/subsubfolder/file1.txt
我知道basename()将输出file1.txt,但我需要文件夹结构,而不是第一个。
最好的方法是什么?使用/
作为描述字符?
我想知道是否有一种从一开始就缩短char数组的简单方法。我正在制作一个文件复制程序,如果我可以通过丢弃第一个文件夹名称缩短整个文件位置,这将使我的生活更轻松。在编程方面,我是一个完整的菜鸟,并认为这对于本网站上的向导来说可能很容易解决。我没有把代码放在我的初始帖子中,因为我不知道它是否是一个能够满足我要求的功能。所以道歉。但如果你必须有代码,那么......
strcpy(sourcePath, Path);
strcat(sourcePath, slash);
这显然不能满足我的需要。
答案 0 :(得分:2)
您可以使用strpbrk
const char * strpbrk ( const char * str1, const char * str2 );
http://en.cppreference.com/w/c/string/byte/strpbrk
它返回指向str1中任何字符的str1中第一个匹配项的指针,如果没有匹配则返回空指针。
在您的情况下str2= "/"
// You can use it in the following way
const char* f = strpbrk(pathname, str2);
int sz = strlen(pathname) - strlen(f); // +/- 1.
new_path_name = strncpy(new_path_name, f, sz);
答案 1 :(得分:1)
您可以使用this来帮助您进行子串:
char subbuff[5]
memcpy( subbuff, &buff[10], 4 );
subbuff[4] = '\0';
和this可帮助您找到索引:
size_t strcspn(const char * str1,const char * str2);
和一个例子:
/* strcspn example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "fcba73";
char keys[] = "1234567890";
int i;
i = strcspn (str,keys);
printf ("The first number in str is at position %d.\n",i+1);
return 0;
}
答案 2 :(得分:0)
您可以使用此部分从数组中删除特定单词
for (i = 0; i < slength; i++)
{
if (str[i] == word[j])
j++;
else
j = 0;
if (j == wlength)
for (t = 0; t <= wlength; t++)
{
for (k = 0; k < slength; k++)
str[i - j + k] = str[i - j + k + 1];
}
}