@fatbeard, Ik had al een tijd naar jouw code zitten staren maar zag geen probleem.
Zelfs toen je aangaf dat het probleem in de sprintf zat duurde het nog even.
Op 14 december 2021 09:01:53 schreef rew:
Dat zou in "rare" omstandigheden toch fout kunnen gaan.
@rew, Ik vroeg me af hoe die bijzondere omstandigheid ook kon optreden in ULP. Ik neem eigenlijk aan dat daar gewoon 8 bits ascii wordt gebruikt, geen unicode of andere fratsen. Even een test gedraaid in ULP.
1 toevoegen aan een string gaat goed, dat heeft fatbeard ook al ondervonden.
2 andersom, het eerste deel van de string proberen te overschrijven, gebeurt niet, gaat ook goed.
3 voor het geval punt 2 door de optimiser wordt gecorrigeerd, aan 2 kanten iets er aan plakken, gaat ook goed.
code:
string tmp = "1234567890";
sprintf( tmp, "%s%s", tmp, "abcdefghi" );
dlgMessageBox( tmp);
tmp = "1234567890";
sprintf( tmp, "%s%s", "abcdefghi", tmp );
dlgMessageBox( tmp);
tmp = "1234567890";
sprintf( tmp, "%s%s%s", "abcdefghi", tmp, "abcdefghi" );
dlgMessageBox( tmp);
exit("");
dezelfde testjes uitgevoerd in C:
code:
char tmp[64];
strcpy( tmp, "1234567890" );
sprintf( tmp, "%s%s", tmp, "abcdefghi" );
cout << tmp << endl;
strcpy( tmp, "1234567890" );
sprintf( tmp, "%s%s", "abcdefghi", tmp );
cout << tmp << endl;
strcpy( tmp, "1234567890" );
sprintf( tmp, "%s%s%s", "abcdefghi", tmp, "abcdefghi" );
cout << tmp << endl;
return 0;
Output (warnings genegeerd):
code:
1234567890abcdefghi
abcdefghiabcdefghia
abcdefghiabcdefghiaabcdefghi
Daar hebben we een probleem gevonden, Zowel C als rew vinden dit niet fijn
C geeft een waarschuwing, in ULP houdt men er blijkbaar rekening mee dat men raar doet.