我需要更新一个较旧的应用程序,其中现在"类型"需要基于第二个文件名的第4个字母进行动态设置:我迅速攻击了在Windows上完美工作的代码,但在Cygwin中给出了细分故障:X.H中定义的"类型"的第一个为
private:
CHAR* Type;
代码:
INT32 Engine::Run(...)
{
Type = new char[4];
strcpy(Type,"");
char FileName[50];
char *pscL;
char Unit[4];
strcpy(Unit,"");
pscL=strrchr(File1,'\');
char *ps = pscL;
ps++;
ps++;
memcpy(Unit,ps,3);
Unit[3]=0;
if (strcmp(Unit, "AAA") == 0)
{
strcpy(Unit,"AAA");
}
else if (strcmp(Unit, "BBB") == 0)
{
strcpy(Unit,"CCC");
}
else
{
strcpy(Unit,"BBB");
}
strcat(Type,Unit);
printf("Type: %s n",Type);
...
//furtherdown Type is used in eg.:
if (strcmp(Type, "HCU") == 0)
...
if (!GetFile(calRet,Anal,pC,fcN,Type)) return -1;
...
file1的形式是" d: tmp testing yada xbbbyyyyyyyyyyyyyyy.zzz"
strcat(类型,单位);给出分段故障。我不想更改"类型"的类型,因为它在整个地方都使用,我不想触摸代码。我在Cygwin安装中可以做的事情非常有限(完成后应该运行)进行调试,这就是为什么它在Windows上工作的原因。
我认为问题在此行中:
pscL=strrchr(File1,'\');
这样做之后,您应该检查Zero的PSCL值:
if(pscL == 0)
{
pscL=strrchr(File1,'/'); //unix style file path on cygwin
}
这是因为,如下所述:
Cygwin为Windows提供了UNIX仿真环境。作为...的一部分 仿真,它提供了一个文件系统映射,显示 Windows文件系统以兼容的方式。