2

私が作っている小さな C プログラムに問題があります。コンパイルしてMac(Windows 7パーティション)と仕事用PC(Windows 7も)で実行すると正常に動作しますが、CNCを実行しているPCで動作する必要があり、Windows XP上にあります. 2台のコンピューターでプログラムの場所を変更できますが、Windows XP PCではどこでも機能しませんテキストファイルを書き込む必要があるときにクラッシュするようですが、上書きできます...いくつかの機能はありますか? Windows XP と互換性がありませんか? もう少し試してみて、何か見つけたらお知らせします。

プログラムをインストールできないため、PS はこのコンピューターでデバッガーを使用できません ... (職場のコンピューター)。

問題を引き起こしているコードは次のとおりです。

int WritePrograms(int vitesse, double hauteur, int longueur, int largeur, double localRabotage, double localGroove, int overdrive)
    {
        char nameOfFile[75];
        char nomProgramR[75];
        char nomProgramG[75];
        char cheminDaccesR[100];
        char cheminDaccesG[100];
        char cheminDaccesGen[] = "programmes/";
        char genR[] = "_Rabotage.nc";
        char genG[] = "_Groove.nc";
        char confirmation [3];
        int i = 0;
        int c = 0;

        char *nomProgram = NULL;
        char *caractere = NULL;

        FILE* fichierRabotage = NULL;
        FILE* fichierGroove = NULL;

        do
        {
            memset(nomProgramG,0,sizeof(nomProgramG));
            memset(nomProgramR,0,sizeof(nomProgramR));
            memset(nameOfFile,0,sizeof(nameOfFile));
            memset(cheminDaccesG,0,sizeof(cheminDaccesG));
            memset(cheminDaccesR,0,sizeof(cheminDaccesR));
            do
            {
            printf("\nVeuillez choisir un nom pour votre programme : ");
            nomProgram = Saisie(nameOfFile,60);
            }while (nomProgram == "0");

            if (strcmp(nomProgram,"exit") == 0)
            {
                printf("\nVous avez decider de ne pas creer le programme\n\n");
                Sleep(2000);
                exit(0);
            }
            else if (strcmp(nomProgram,"\0") == 0)
            {
                printf("\nVous n'avez pas rentrer de nom pour votre programme\n");
                sprintf(nomProgramR,"%dX%.0fX%dX%d_Rabotage.nc",vitesse,hauteur*10000,longueur,largeur);
                sprintf(nomProgramG,"%dX%.0fX%dX%d_Groove.nc",vitesse,hauteur*10000,longueur,largeur);
                printf("\nUn nom generique lui a ete attribuer\n");
                sprintf(nomProgram,"%dX%.0fX%dX%d",vitesse,hauteur*10000,longueur,largeur);
                printf("\n%s\n",nomProgram);
                strcpy(cheminDaccesR,cheminDaccesGen);
                strcpy(cheminDaccesG,cheminDaccesGen);
                strcat(cheminDaccesR,nomProgramR);
                strcat(cheminDaccesG,nomProgramG);
            }
            else
            {
                strcpy(nomProgramG,nomProgram);
                strcpy(nomProgramR,nomProgram);
                strcpy(cheminDaccesR,cheminDaccesGen);
                strcpy(cheminDaccesG,cheminDaccesGen);
                strcat(nomProgramR,genR);
                strcat(nomProgramG,genG);
                strcat(cheminDaccesR,nomProgramR);
                strcat(cheminDaccesG,nomProgramG);
            }

            fichierRabotage = fopen(cheminDaccesR,"r");
            fichierGroove = fopen(cheminDaccesG,"r");
            if (fichierRabotage != NULL || fichierGroove != NULL)
            {
                do
                {
                printf("\nLe fichier existe deja, voulez-vous le remplacez (O/N)?");
                caractere = Saisie(confirmation,3);
                }while (strcmp(caractere,"O") != 0 && strcmp(caractere,"o") != 0 && strcmp(caractere,"n") != 0 && strcmp(caractere,"N") != 0);
                if (strcmp(caractere,"O") == 0 || strcmp(caractere,"o") == 0)
                {
                    c = 1;
                }
            }
            else
            {
                c = 1;
            }
        }while (c != 1);
        fclose(fichierGroove);
        fclose(fichierRabotage);

        fichierRabotage = fopen(cheminDaccesR,"w+");
        fichierGroove = fopen(cheminDaccesG,"w+");
        if (fichierRabotage != NULL && fichierGroove != NULL)
        {

        }
        else
        {
            printf("\nLe programmme n'as pas pu etre creer\n");
            Sleep(2000);
            exit(0);
        }
        fprintf(fichierGroove, "[OUTIL 3-CARBIDE 1/8-TEMPS: 7MIN] \n");
        fprintf(fichierGroove, "[MATERIEL-MOUSSE RPM 200]\n");
        fprintf(fichierGroove, "G20\nG00\nG90\nT2\nG53 Z\nG53 XY\nG92 Z%.4f\nG4 [Changer l'outil]\nM03\n",localGroove);
        fprintf(fichierGroove, "G0 X2.5\nG0 Y2.5\nG0 Z%.4f\n",hauteur);

        return 0;
    }

そして、ここに ask としての headers.h があります:

#ifndef HEADERS_H_INCLUDED
#define HEADERS_H_INCLUDED

char *Saisie(char *str,int n);
void viderBuffer();
int SaisieNombre(char *chaine,int a);
double SaisieNombreDecimal(char *chaine,int a);
double LireValeurCorrespondante(double thick);
int GetLocals(double *groove, double *rabotage);
int WritePrograms(int vitesse, double hauteur, int longueur, int largeur, double localRabotage, double localGroove, int overdrive);

#endif // HEADERS_H_INCLUDED
4

1 に答える 1

1

ここでの問題は、2つのファイルを開いて、それらが存在するかどうか、およびそれらの1つが存在するかどうかを確認することでした。プログラムは私がそれを上書きしたいかどうか教えてくれます。次に、両方のファイルを閉じて、必要に応じて上書きしますが、開かなかった場合は、NULLポインターを閉じようとします。したがって、解決策はこれを行うことでした:

if (fichierGroove != NULL)
    {
    fclose(fichierGroove);
    }
    if (fichierRabotage != NULL)
    {
    fclose(fichierRabotage);
    }

ここでのレッスン:Windows 7ではNULLポインターを閉じることができますが、XPでは閉じることができません

他のすべてのOSについてはわかりません。

于 2012-12-06T14:22:21.767 に答える