1

我目前有一个存储文件名的 char 数组。

eg. folder1/subfolder/subsubfolder/file1.txt

我希望能够删除此 char 数组中的第一个文件夹名称。所以它变成了

subfolder/subsubfolder/file1.txt

我知道 basename() 将输出 file1.txt 但我需要文件夹结构,而不是第一个。

最好的方法是什么?用作/描述字符?

  • 编辑 * 好吧,显然我不能在不详细介绍我的整个该死程序的情况下询问 char 数组,哈哈。

我想知道是否有一种简单的方法可以从一开始就缩短 char 数组。我正在开发一个文件复制程序,如果我可以通过丢弃第一个文件夹名称来缩短完整文件的位置,它只会让我的生活更轻松。在编程方面,我是一个完全的菜鸟,并认为这对于本网站上的向导来说可能是一个容易解决的问题。我没有在我的初始帖子中添加代码,因为我不知道这是否是一个可以满足我要求的函数。所以道歉。但如果你必须有代码,那么在这里......

        strcpy(sourcePath, Path); 
    strcat(sourcePath, slash);

这显然没有做我需要做的事情。

4

3 回答 3

2

您可以使用strpbrk

const char * strpbrk ( const char * str1, const char * str2 );

http://en.cppreference.com/w/c/string/byte/strpbrk

它返回指向 str1 中第一次出现的作为 str2 一部分的任何字符的指针,如果没有匹配项,则返回空指针。

在你的情况下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);
于 2013-09-15T14:47:38.757 回答
1

你可以用来帮助你子串:

char subbuff[5]
memcpy( subbuff, &buff[10], 4 );
subbuff[4] = '\0';

这可以帮助您找到以下索引

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;
}
于 2013-09-15T14:37:13.353 回答
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];
        }
}
于 2019-04-11T13:35:43.030 回答