0

いくつか質問があります。ファイル パスを手動で入力すると、関数 fopen_s は常に失敗しますが、コードで同じパスを設定すると、ファイルは問題なく開きます。私の2番目の問題は、「delete [] bytes」と「delete [] locatie」がコンパイルされないことです。

エラー C2065: 'delete' 宣言されていない識別子

C2059: 構文エラー ']'

理由はわかりません。ASM部分は最適化されたループです。

char* getline()
{
    char line[50];  
    char *eof;
    line[0] = '\0'; 
    line[sizeof(line)-1] = ~'\0';  
    eof = fgets(line, sizeof(line), stdin);
}

int _tmain(int argc, _TCHAR* argv[])
{
    char* locatie, *bytes, c;
    FILE* bestand;
    int i, size;
    struct stat st;

    printf_s("Voer het pad van het bestand in en druk op enter.\n");
    locatie = getline();
    locatie[strlen(locatie)-1] ='\0';
    locatie = "C:\\Users\\xxx\\Documents\\haha.txt"; // <-- this line

    if ((i = fopen_s(&bestand, locatie, "r" )) != 0)
    {
        printf_s("Het bestand bestaat niet, of kon niet worden geopend!");
        getchar();
        return -1;
    }

    stat(locatie, &st);
    size = st.st_size;
    bytes = (char*)malloc(i+1);
    i = 0;

    loop:
    c = fgetc(bestand);
    __asm
    {
        movsx eax, byte ptr [c]
        cmp eax, 0x0FFFFFFFF
        je Break
        mov eax, dword ptr [bytes]
        add eax, dword ptr [i]
        mov cl, byte ptr [c]
        xor cl, 32
        mov byte ptr [eax], cl  
        mov eax, dword ptr [i]  
        add eax, 1
        mov dword ptr [i], eax
        jmp loop
    }

    Break:
    fclose(bestand);
    bytes[i] = '\0';
    printf(bytes);

    locatie = "C:\\Users\\xxx\\Documents\\haha.cpt";
    fopen_s(&bestand, locatie, "w");
    fprintf_s(bestand, "%c", bytes);
    fclose(bestand);
    delete[] bytes;
    delete[] locatie;
    return 0;
}
4

2 に答える 2

0

しかし、getline()何も返されていません!もしそうなら、ローカルバッファへのポインタを返しているように見えます---line関数が戻るとすぐにスコープから外れます。

于 2012-10-26T14:47:39.850 に答える
0

delete[]C ++であり、Cで使用free()します。

getline()関数は何もしないため、プログラムの動作は未定義returnです。を返すことによってこれを修正しようとしないでくださいline(またはeofNULLまたはを指すline)がmalloc()、新しいバッファに戻ってそれを返すか、バッファを渡してデータgetline()を入力する必要があります。

これは間違いです:

fprintf_s(bestand, "%c", bytes);

フォーマット指定子"%c"は型の引数を期待しますcharbyteschar*です。"%s"代わりに使用してください:

fprintf_s(bestand, "%s", bytes);
于 2012-10-26T14:45:25.267 に答える