在这样的字符串里冒号’:‘或表格号‘|’能不能作为strchr函数查找位置的字符?

时间:2023-01-04 11:32:01
我的程序和运行跟踪结果如下:
1. char *p1;
2. char *strsourcefile;
..........
3. strsourcefile= ret;
4. p1 =strchr(strsourcefile, ':');
5. p1++;
6. p1 =strchr(p1, ':');

跟踪的图片传不上按这格式来敲几个字吧!
名称
 p1                        0x0bfd20e0 " File\lengprog(ys)\temp\陶瓷元件1.sldprt"
strsourcefile          0x0bfd20a8 "C:\Program File\lengprog(ys)\test\Cheadgp.cfm C:\Program File\lengprog(ys)\temp\陶瓷元件                                 1.sldprt"

strsourcefile的字符是VB程序传给ret的,是VB的APP.path产生的,没法考虑c里的转义不转义的问题,即两个文件路径(中间有个空格),我想从这空格分成两段
可第4句的strchr判断位置的无论用什么字符,它都从后面一个Program File空格给截断,各位老师有没有什么解决的方法。
        我用wIN32 Console把char *strsourcefile="C:\Program File\lengprog(ys)\test\Cheadgp.cfm C:\Program File\lengprog(ys)\temp\陶瓷元件1.sldprt"进行执行是可以的vb传进来为什么就不行?

4 个解决方案

#1


路径如果有空格,用引用引起来

#2


多找几次, 先找.(点) , 点后找空格

#3


不知道满不满足楼主的需求:
	char *p1;
char *strsourcefile;
int i = 0;
char tmp[100];
char *ret = "C:\\Program File\\lengprog(ys)\\test\\Cheadgp.cfm C:\\Program File\\lengprog(ys)\\temp\\陶瓷元件1.sldprt";
strsourcefile = ret;

while (1){
if (strsourcefile[0] == ' ' && strsourcefile[2] == ':')
{
memset(tmp, '\0', 100);
strncpy(tmp, ret, i);
p1 = ++strsourcefile;
break;
}
strsourcefile++;
i++;
}
printf("0.%s %s\n",tmp, p1);

#4


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PATH 256
char strsourcefile[]="C:\\Program File\\lengprog(ys)\\test\\Cheadgp.cfm C:\\Program File\\lengprog(ys)\\temp\\陶瓷元件                                 1.sldprt";
char s1[MAX_PATH];
char s2[MAX_PATH];
char *p,*q;
int main() {
    s1[0]=0;
    s2[0]=0;
    p=strchr(strsourcefile,':');
    if (p) {
        q=strchr(p+1,':');
        if (q) {
            strncpy(s1,p-1,__min(q-p-1      ,MAX_PATH-1));s1[MAX_PATH-1]=0;
            strncpy(s2,q-1,__min(strlen(q-1),MAX_PATH-1));s2[MAX_PATH-1]=0;
        }
    }
    printf("[%s]\n[%s]\n",s1,s2);
    return 0;
}
//[C:\Program File\lengprog(ys)\test\Cheadgp.cfm]
//[C:\Program File\lengprog(ys)\temp\陶瓷元件                                 1.sldprt]
//

#1


路径如果有空格,用引用引起来

#2


多找几次, 先找.(点) , 点后找空格

#3


不知道满不满足楼主的需求:
	char *p1;
char *strsourcefile;
int i = 0;
char tmp[100];
char *ret = "C:\\Program File\\lengprog(ys)\\test\\Cheadgp.cfm C:\\Program File\\lengprog(ys)\\temp\\陶瓷元件1.sldprt";
strsourcefile = ret;

while (1){
if (strsourcefile[0] == ' ' && strsourcefile[2] == ':')
{
memset(tmp, '\0', 100);
strncpy(tmp, ret, i);
p1 = ++strsourcefile;
break;
}
strsourcefile++;
i++;
}
printf("0.%s %s\n",tmp, p1);

#4


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PATH 256
char strsourcefile[]="C:\\Program File\\lengprog(ys)\\test\\Cheadgp.cfm C:\\Program File\\lengprog(ys)\\temp\\陶瓷元件                                 1.sldprt";
char s1[MAX_PATH];
char s2[MAX_PATH];
char *p,*q;
int main() {
    s1[0]=0;
    s2[0]=0;
    p=strchr(strsourcefile,':');
    if (p) {
        q=strchr(p+1,':');
        if (q) {
            strncpy(s1,p-1,__min(q-p-1      ,MAX_PATH-1));s1[MAX_PATH-1]=0;
            strncpy(s2,q-1,__min(strlen(q-1),MAX_PATH-1));s2[MAX_PATH-1]=0;
        }
    }
    printf("[%s]\n[%s]\n",s1,s2);
    return 0;
}
//[C:\Program File\lengprog(ys)\test\Cheadgp.cfm]
//[C:\Program File\lengprog(ys)\temp\陶瓷元件                                 1.sldprt]
//