Talk:Find common directory path: Difference between revisions
(Add suggestion for much simpler version for C language) |
No edit summary |
||
Line 33: | Line 33: | ||
} |
} |
||
</lang> |
</lang> |
||
:I think that the last two lines of leastCommonPath are wrong: <lang c> t = strrchr(moving, '/'); |
|||
if (t && t != moving) *t = '\0';</lang>. This should place the null after the slash, and not eliminate the slash otherwise the slash will not be available for future comparisons. If you change "coverage" to "dovetail" in the example data, I think this problem would raise its head. --[[User:Rdm|Rdm]] 11:46, 14 April 2011 (UTC) |
Revision as of 11:46, 14 April 2011
Much simpler version for the C language:
<lang C>
- define PATH_MAX 127
- include <string.h>
- include <stdio.h>
static void leastCommonPath(const char *fixed, char *moving) { char *t; unsigned n = strspn(moving, fixed); if (strlen(fixed) > n && strlen(moving) == n && fixed[n] == '/') return; strcpy(moving, fixed); moving[n] = '\0'; t = strrchr(moving, '/'); if (t && t != moving) *t = '\0'; }
int main() { char *dir_list[] = { "/home/user1/tmp/coverage/test", "/home/user1/tmp/covert/operator", "/home/user1/tmp/coven/members", NULL }; int i = 0; char tmp[PATH_MAX]; strcpy(tmp, dir_list[0]); while (dir_list[++i]) { leastCommonPath(dir_list[i], tmp); } printf("%s\n", tmp); return 0; } </lang>
- I think that the last two lines of leastCommonPath are wrong: <lang c> t = strrchr(moving, '/');
if (t && t != moving) *t = '\0';</lang>. This should place the null after the slash, and not eliminate the slash otherwise the slash will not be available for future comparisons. If you change "coverage" to "dovetail" in the example data, I think this problem would raise its head. --Rdm 11:46, 14 April 2011 (UTC)