C 如何将字符串的前面部分复制到分隔符

C 如何将字符串的前面部分复制到分隔符,c,C,我需要抓住字符串的第一部分,直到并包括路径中的最后一个反斜杠。我对C相当陌生,所以我想知道下面的代码是否是一个好方法?还是有更好的办法 #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { char szPath[260] = {0}; strcpy(szPath, argv[0]); char* p = szPath; size_t len = s

我需要抓住字符串的第一部分,直到并包括路径中的最后一个反斜杠。我对C相当陌生,所以我想知道下面的代码是否是一个好方法?还是有更好的办法

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {

   char szPath[260] = {0};
   strcpy(szPath, argv[0]);
   char* p = szPath;

   size_t len = strlen(argv[0]);
   p+=len;  //go to end of string

   int backpos = 0;
   while(*--p != '\\')
       ++backpos;

   szPath[len-backpos] = 0;

   printf("%s\n", szPath);

   return 0;
}

我会选择
strrchr
。这假设
str
指向可写内存:

char *p;
if ((p = strrchr(str, '\\'))
    *(p + 1) = 0; /* Since we passed it to strrchr, it's 0-terminated. */

显然,
basename
dirname
可能存在,如果您使用的是路径,可能更合适。

如果没有
'\\'
的话,您不需要处理这种情况,您也可以说
*p=0而非
szPath[len backpos]=0
并一起删除
backpos
。如果
argv[0]
(记住,程序(路径)名称)超过260字节,则存在未检查的缓冲区溢出问题。char szPath[260];strcpy(szPath,argv[0])//扫描字符串以查找最后出现的字符。charp=strrchr(szPath,“\\”);如果(p){*(p+1)=0;/retain backslah和null在/}之后终止,否则{/handle error*/}printf(“%s\n”,szPath);
char *p;
if ((p = strrchr(str, '\\'))
    *(p + 1) = 0; /* Since we passed it to strrchr, it's 0-terminated. */