2017-12-13 27 views
1

古いアプリケーションを更新する必要があります。ここで、 "Type"は2番目から4番目の文字に基づいて動的に設定する必要があります。ファイル名:Windows上で完璧に動作しますが、Cygwinのでセグメンテーションフォールトを与えるコード以下 私はすぐにハッキング:strcat 3 charからcharへのchar *はWindows上で動作しますが、Cygwinではセグメンテーションフォールトを返します

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; 
    ... 

: は、「タイプ」の第一は、コード

private: 
    CHAR* Type; 

としてXHに定義されていますFile1は、 "D:\ tmp \ testing \ yada \ XBBBYYYY123YYY.ZZZ "

strcat(タイプ、ユニット);セグメンテーション違反が発生します。私は「タイプ」のタイプを変更したくないのですが、これは場所のいたるところで使用されているため、触れたくないコードです。 私はcygwinのインストール(終了時に実行する必要がある)でデバッグすることができないので、Windows上で動作するのは難しいです。

+1

パスはcygwinとWindowsで同じスラッシュを使用していますか? –

+1

std :: stringを使用し、str *関数を使用しないでください。 –

+0

このコードは非常に壊れやすく見えます。 –

答えて

1

私はこの問題は、この行であると思う:

pscL=strrchr(File1,'\\'); 

あなたはそれをやった後、ゼロに対してPSCL値をチェックする必要があります:

if(pscL == 0) 
{ 
    pscL=strrchr(File1,'/'); //unix style file path on cygwin 
} 

as explained here、これは次のとおりです。

CygwinはWindows用のUnixエミュレーション環境を提供します。 エミュレーションの一部として、 WindowsファイルシステムをUnix互換の方法で表示するファイルシステムマッピングを提供します。

関連する問題