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

str2 の一部であるいずれかの文字が str1 で最初に出現する位置へのポインターを返すか、一致する文字がない場合は null ポインターを返します。

あなたの場合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 に答える