Re: [Csnd-dev] [EXTERNAL] [Csnd-dev] strange string behaviour
vlz <[email protected]> Sun, 14 Sep 2025 09:21:07 +0100
| Newsgroups | gmane.comp.audio.csound.devel |
|---|---|
| Message-ID | <[email protected]> |
yes, S-types are confusing that way. Prof. Victor Lazzarini Maynooth University Ireland > On 14 Sep 2025, at 02:33, joachim heintz <[email protected]> wrote: > > thank you! > it is confusing to me that sprintfk and strcatk not only run at k-time but also at i-time. > but i see now that the problem is in > Snew = "" > which tells csound to run also at i-rate. > it works when i change to > Snew = strcpyk("") > > >> On 14/09/2025 09:15, Victor Lazzarini wrote: >> There is no issue, the printout is what I would have expected. >> Snew runs only at i-time, sprintfk/strcatk run at i-time and perf-time, printf only at perf-time. >> i-time: >> Snew >>>> "" >> Sline >>>> "1\n" >> Snew >>>> "1\n" >> p-time: >> Sline >>>> "1\n1\n" >> Snew >>>> "1\n1\n1\n" >> Sline = >> 1 >> 1 >> Snew = >> 1 >> 1 >> 1 >> turnoff >> Prof. Victor Lazzarini >> Maynooth University >> Ireland >>>> On 14 Sep 2025, at 01:01, joachim heintz <[email protected]> wrote: >>> >>> yes but there is only one cycle because of the turnoff. >>> so why is it repeating the string? >>> >>> this code gets the same result although it clearly should only run one cycle: >>> Snew = "" >>> if timeinstk() == 1 then >>> Sline = sprintfk("%s%d\n",Snew,1) >>> Snew = strcatk(Snew,Sline) >>> printf("Sline = \n%s\n",1,Sline) >>> printf("Snew = \n%s\n",1,Snew) >>> endif >>> >>> i tried several versions and it has something to do with the line >>> Snew = "" >>> >>> i will try to get closer and then file an issue. >>> >>>> On 13/09/2025 23:35, Victor Lazzarini wrote: >>>> is printf running at perf time? the string opcodes are "k" >>>> Prof. Victor Lazzarini >>>> Maynooth University >>>> Ireland >>>>>> On 13 Sep 2025, at 15:11, joachim heintz <[email protected]> wrote: >>>>> >>>>> due to strange problems with an old csd i came to this: >>>>> >>>>> instr 1 >>>>> Snew = "" >>>>> Sline = sprintfk("%s%d\n",Snew,1) >>>>> Snew = strcatk(Snew,Sline) >>>>> printf("Sline = \n%s\n",1,Sline) >>>>> printf("Snew = \n%s\n",1,Snew) >>>>> turnoff >>>>> endin >>>>> schedule(1,0,1) >>>>> >>>>> i expect Sline to be 1 and Snew also. but as printout shows: >>>>> Sline = >>>>> 1 >>>>> 1 >>>>> Snew = >>>>> 1 >>>>> 1 >>>>> 1 >>>>> >>>>> am i doing something silly, or what is happening here?