Effacer les filtres
Effacer les filtres

Matlab Coder and Ceval

3 vues (au cours des 30 derniers jours)
CP
CP le 24 Août 2011
I'm trying to use matlab coder and would like to display some text on the terminal from which I run the compiled C code. I'm having issues with the simple printf
The code in matlab is:
for n=2:10
coder.ceval('printf','%d',n);
end
where n is the thing I want to print out to teh screen
The code I end up getting is:
static const char_T cv0[2] = { '%', 'd' };
char_T cv1[2];
n=2;
while (n <= 10)
for (i0 = 0; i0 < 2; i0++) {
cv1[i0]=cv0[i0];
}
printf(cv1, (real_T)n);
which does not seem to output the value of n, but instead just 0s
The code I WANT is:
printf("%d",n);
which does what I want when I put it in the .c file myself and compile
Any help would be appreciated

Réponse acceptée

Kaustubha Govind
Kaustubha Govind le 24 Août 2011
Try:
for n=2:10
coder.ceval('printf','%d ',int32(n));
end
or
for n=2:10
coder.ceval('printf','%f ', n);
end
In MATLAB, 'n' is double by default.
EDIT:
To pass in a newline character, you can use the ASCII value (=10 for \n):
formatString = ['%d' char(10)];
for n=2:10
coder.ceval('printf', formatString, int32(n));
end
  4 commentaires
CP
CP le 24 Août 2011
It's not copy pasted, some brackets and unimportant things are missing. there are indeed brackets around the while statements. The while loop has a ton of statements, one of which is n++, both the for loop and the printf statement are also within the while loop.
Kaustubha Govind
Kaustubha Govind le 25 Août 2011
@CP: When you say you do printf("%d",n) manually, do you mean you've written C code to do this? If yes, you are probably declaring 'n' as an int. MATLAB Coder generates 'n' as a real_T (double).
I edited my answer to show how to insert a newline character.

Connectez-vous pour commenter.

Plus de réponses (1)

Alexander Bottema
Alexander Bottema le 30 Sep 2011
There's a serious flaw in the example given. C uses NUL character for string termination, therefore you need to do:
formatString = ['%d' 10 0];
coder.ceval('printf', formatString, int32(n));
Otherwise you can get unexpected crashes.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by