2010-01-29 27 views
2

我有像「folder1/file1.txt」或「foldername1/hello.txt」字符串,我需要採用字符串標識文件夾名稱與斜槓(/)包括
(例如:從「folder1/file1.txt」我需要「folder1 /」)。
文件夾名稱並非全部具有相同的長度。 我該怎麼做C?感謝從字符串像子文件夾1/file1.txt的子串C

回答

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,表示斜槓不在那裏。

+0

你migth希望從字符串的末尾使用strrchr() – 2010-01-29 11:30:56

+0

找到斜線取決於他是否想要路徑中的第一個目錄或整個shebang - 大多數操作系統有一個功能來做後者,所以我假設前者。 – 2010-01-29 11:35:53

3

找到最後的'/'字符,前進一個字符,然後截斷字符串。假設字符串是可以修改的,並且指向char *filename;

char *p; 

p = strrchr(filename, '/'); 
if (p) 
{ 
    p[1] = '\0'; 
} 

/* filename now points to just the path */ 
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); 
} 
1

如果您在POSIX機器上工作,你可以看一下dirname()函數,它可以或多或少地做你想要的。有一些特殊情況是它處理那些樸素的代碼沒有的 - 但要小心標準中的黃鼠狼字(關於修改輸入字符串,可能會返回一個指向輸入字符串的指針,或者可能是一個指向可以修改的靜態內存的指針後來)。它(dirname())不保留你說你需要的尾部斜線。但是,這很少是一個實際問題;在目錄名和文件之間添加斜線並不難。