strcat 3 char从char []到char *在Windows上工作,但在Cygwin中给出了细分故障

strcat 3 char from char[] to char * works on Windows, but gives segmentation fault in Cygwin

本文关键字:char Cygwin 但在 故障 细分 工作 Windows strcat      更新时间:2023-10-16

我需要更新一个较旧的应用程序,其中现在"类型"需要基于第二个文件名的第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文件系统以兼容的方式。