C 如何将字符串的前面部分复制到分隔符
我需要抓住字符串的第一部分,直到并包括路径中的最后一个反斜杠。我对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
#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. */