我需要检查存储在字符串中的路径是否实际上是一个文件的路径,该文件的名称我已存储在另一个字符串中。
例如:假设我在/ etc / prog / myprog
中有一个文件我有这种功能:
char *slash = strrchr(procname, '/');
if(slash && !strcmp(slash, name)){
printf("FOUND!\n");
}
它在查找“myprog”时工作正常,但如果文件有扩展名,它显然不起作用(例如,如果字符串以“/vim.basic”结尾)我希望if语句在查找时为true为“vim”)。
我想我必须使用strrchr来找到dot的位置,如果它存在,停止在该char处进行比较,但我不知道如何构造条件语句以这种方式工作。
答案 0 :(得分:1)
需要strncmp
和一些额外的计算和检查。
请注意,此时您的代码已关闭1:
if (slash && !strcmp(slash, name))
.. slash
会将指向斜杠,因此除非您在name
中考虑到它,否则它将始终失败。
此代码有效:
if (slash &&
!strncmp(slash+1, name, strlen(name)) &&
(!slash[1+strlen(name)] || slash[1+strlen(name)] == '.'))
{
printf("FOUND!\n");
}
它检查slash+1
的第一个 n 字符是否等于name
长度 name
- 因此,它会检查vim
中的etc/vim.basic
- 然后检查name
后面是0
字符串结尾或 1}}角色。
如果您可以修改.
:
procname
(如果无法更改if (slash)
{
char *dot = strchr (slash, '.');
if (dot) *dot = 0;
if (!strcmp(slash+1, name))
{
printf("FOUND!\n");
}
}
,则无效,如procname
。如果可以的话,OTOH甚至可以通过添加
char *procname = ".."
最后。)