「folder1/file1.txt」や「foldername1/hello.txt」などの文字列があり、スラッシュ (/) を含むフォルダー名を識別する部分文字列を取得する必要があります
(例: 「folder1/file1.txt」から i "folder1/" が必要です)。
フォルダ名の長さがすべて同じではありません。Cでこれを行うにはどうすればよいですか?? ありがとう
1727 次
4 に答える
3
まず、strchr でスラッシュの位置を見つけます。
char * f = "folder/foo.txt"; // or whatever
char * pos = strchr( f, '/' );
次に、適切な場所にコピーします。
char path[1000]; // or whatever
strncpy( path, f, (pos - f) + 1 );
path[(pos-f)+1] = 0; // null terminate
これを行うには実際に関数を作成する必要があり、strchr() がスラッシュがないことを示す NULL を返した場合にどうするかを決定する必要があります。
于 2010-01-29T11:28:07.193 に答える
3
最後の「/」文字を見つけ、1 文字進めてから、文字列を切り捨てます。文字列が変更可能であり、によって指されていると仮定しますchar *filename;
:
char *p;
p = strrchr(filename, '/');
if (p)
{
p[1] = '\0';
}
/* filename now points to just the path */
于 2010-01-29T11:28:47.893 に答える
1
POSIXマシンで作業している場合は、dirname()
関数を検索できます。この関数は、多かれ少なかれ必要なことを実行します。そのナイーブなコードを処理しない特別な場合がいくつかありますが、標準のイタチ語にも注意してください(入力文字列を変更し、入力文字列へのポインタまたは変更可能な静的メモリへのポインタを返すことについて)後で)。
It(dirname())は、必要と言う末尾のスラッシュを保持しません。ただし、それが実際的な問題になることはめったにありません。ディレクトリ名とファイルの間にスラッシュを追加するのは難しくありません。
于 2010-01-30T05:49:49.703 に答える
1
strstr() 関数を使用できます。
char *s = "folder1/file1.txt";
char folder[100];
char *p = strstr(s, "/");
if (0 != p)
{
int len = p - s + 1;
strncpy(folder, s, len);
folder[len] = '\0';
puts(folder);
}
于 2010-01-29T11:29:50.907 に答える