I'm having difficulties with storing strings for the third time and I keep forgeting, how my previous solutions worked out.
So, here we have a piece of code:
Code:
oscmatch("/track/%d/name", trackNumber) ? (
oscparm(0,'s',oscTrackName[trackNumber]);
oscTrackName8[trackNumber] = formatString(oscTrackName[trackNumber],8,1);
printf("f %i - %s\n", trackNumber, oscTrackName[trackNumber]);
printf("r %i - %s\n", trackNumber, oscTrackName8[trackNumber]);
printf("f4 %i - %s\n", trackNumber, oscTrackName[4]);
printf("r4 %i - %s\n", trackNumber, oscTrackName8[4]);
printf("---\n");
);
Let's say that
formatString function just reduced incoming strings to the length of 8 characters.
And this is the log output:
Code:
f 1 - asdas121415
r 1 - asdas121
f4 1 - Track 4
r4 1 - asdas121
---
f 2 - Track 2
r 2 - Track 2
f4 2 - Track 4
r4 2 - Track 2
---
f 3 - Track 3
r 3 - Track 3
f4 3 - Track 4
r4 3 - Track 3
---
f 4 - Track 4
r 4 - Track 4
f4 4 - Track 4
r4 4 - Track 4
---
f 5 - Track 5
r 5 - Track 5
f4 5 - Track 4
r4 5 - Track 5
---
f 6 - Track 6
r 6 - Track 6
f4 6 - Track 4
r4 6 - Track 6
---
f 7 - Track 7
r 7 - Track 7
f4 7 - Track 4
r4 7 - Track 7
---
f 8 - Track 8
r 8 - Track 8
f4 8 - Track 4
r4 8 - Track 8
As it can be seen here, full strings, i.e oscTrackName[trackNumber] (f) are stored properly, based of trackNumber = 4 (f4) behavior.
Reduced variables, i.e. oscTrackName8[trackNumber] (r) are all pointing to the same string, as trackNumber = 4 (r4) is showing us.
Here's how those arrays are declared in @init section. Both are declared exactly the same way:
Code:
oscTrackName = 49*16384;
oscTrackName8 = 61*16384;
mem_set_values(oscTrackName+1, #,#,#,#,#,#,#,#);
mem_set_values(oscTrackName8+1, #,#,#,#,#,#,#,#);
So, when displaying track names with oscTrackName we get this:
and with oscTrackNames8 we get this:
And I don't understand, why.