[c++] vreemd strncat verschijnsel

Pagina: 1
Acties:

  • cenix
  • Registratie: September 2001
  • Laatst online: 22:40
Momenteel probeer ik wat text in een file weg te schrijven.
Nu probeer ik op de volgende manier, de text te initialiseren en er een getal (een offset) aan vast te plakken.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    char szTrailer[] = {
        "command\n"
        "%% Size=7 %%\n"
        "offset\n"
    };

        // zet de offset achter aan de szTrailer text
    char szOffset[10];
    sprintf(szOffset, "%d", offset);
        // sizeof()-1 omdat we geen \0 nodig hebben
    strncat(szTrailer, szOffset, sizeof(szOffset)-1);

        // Test debug stringetje
    printf("%s\n", szTrailer);


het wegschrijven gebeurd als volgt...

C++:
1
2
    fstream File(pszFileName, ios::out | ios::binary);
    File.write(szTrailer, sizeof(szTrailer));


Als ik echter in de console laat zien wat er in de file komt, geeft hij alles prachtig weer, echter in de file wordt het getal (int) ongeveer 12 regels hoger geplaats en overschrijft hij bestaande text.

Jep, ik weet het.. ik gebruik c functies in c++ maar goed..
waarom komt het getal niet achteraan de text te staan,
maar op een andere plaats 8)7

Verwijderd

Ik zou je documentatie over strncat() nog eens doorlezen als ik jou was:
char *strcat(char *dest, const char *src);

char *strncat(char *dest, const char *src, size_t n);

DESCRIPTION
The strcat() function appends the src string to the dest
string overwriting the `\0' character at the end of dest,
and then adds a terminating `\0' character. The strings
may not overlap, and the dest string must have enough
space for the result.

The strncat() function is similar, except that only the
first n characters of src are appended to dest.
M.a.w. in je code probeer je de karakters in szOffset te copieren achter het laatste karakter van szTrailer; terwijl je in szTrailer geen plaats gereserveerd hebt voor die extra karakters uit szOffset. Je overschrijft dus een stuk geheugen achter het laatste karakter van szTrailer waar hoogstwaarschijnlijk andere variabelen in staan, met onvoorspelbare resultaten als gevolg.

(Je gebruikt de 3e parameter van strncat() dus ook fout, die moet aangeven hoeveel karakters er nog in szTrailer beschikbaar zijn.)

  • cenix
  • Registratie: September 2001
  • Laatst online: 22:40
The strings may not overlap, and the dest string must have enough
space for the result.
oops.. |:( dat had ik dus helemaal over het hoofd gezien.
maar op zich maakt het niets meer uit.. ik gebruik nu de STL string.. werkt op veel plaatsen een stuk makkelijker :)

maareh.. mietje toch bedankt!