Matlab Coder and Ceval

조회 수: 3 (최근 30일)
CP
CP 2011년 8월 24일
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

채택된 답변

Kaustubha Govind
Kaustubha Govind 2011년 8월 24일
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
CP
CP 2011년 8월 24일
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 2011년 8월 25일
@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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Alexander Bottema
Alexander Bottema 2011년 9월 30일
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