字符串删除问题
string s2 = "/home/abc/a/b/b.c";
[User:root Time:21:35:02 Path:/home/liangdong/c]$ ./output path_erase(/home/abc/a/b/b.c, 0) return 0, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 1) return 0, path abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 2) return 0, path a/b/b.cpath_erase(/home/abc/a/b/b.c, 3) return 0, path b/b.cpath_erase(/home/abc/a/b/b.c, 4) return 0, path b.cpath_erase(/home/abc/a/b/b.c, 5) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 6) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 7) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 8) return -1, path /home/abc/a/b/b.cpath_erase(/home/abc/a/b/b.c, 9) return -1, path /home/abc/a/b/b.c[User:root Time:21:35:03 Path:/home/liangdong/c]$ cat src/main.c #include <stdio.h>#include <stdlib.h>#include <string.h>int path_erase(char *path, int num) { if (num < 0) { return -1; } else if (num == 0) { return 0; } int len = strlen(path); char *begin = path; if (strncmp(path, "./", 2) == 0) { begin += 2; } else if (strncmp(path, "/", 1) == 0) { begin += 1; } int i; int cnt = 0; for (i = 0; *begin != '\0' && cnt != num; ++ begin) { if (*begin == '/') { ++ cnt; } } if (cnt == num) { if (*begin != '\0') { int left = len - (begin - path); memmove(path, begin, left); path[left] = '\0'; return 0; } else { path[0] = '\0'; return 0; } } return -1; //没有num级目录}int main(int argc, char* const argv[]) { char str[] = "/home/abc/a/b/b.c"; char *dup = strdup(str); int i = 0; for ( ; i != 10; ++ i) { int ret = path_erase(dup, i); printf("path_erase(%s, %d) return %d, path %s\n", str, i, ret, dup); strcpy(dup, str); } free(dup); return 0;}