MATLAB Answers

fantic
0

difference between sprintf and fprintf

Asked by fantic
on 16 Sep 2011
Latest activity Edited by Stephen Cobeldick
on 12 May 2015

I've read many answers regarding this question, but I still do not get the gist of it. So what if sprintf writes to a screen, while fprintf writes to a file? How does it matter/make a difference?

Please try to explain in layman's term because I'm only a beginner.

Thanks!!

  0 Comments

Products

No products are associated with this question.

2 Answers

Answer by Walter Roberson
on 16 Sep 2011

Yes, both of them format data using the same formatting rules. sprintf() returns the formatted data as a string, which the user can store or further manipulate or display as appropriate. fprintf() writes the formatted data to whichever file or device (such as a serial port) it is connected to.

You may have also seen reference to fwrite(). fprintf(fid,...) is (for these purposes) the same as fwrite(fid,sprintf(...)) but fprintf() does not (theoretically) need to build the entire string before writing it out to the connected device. fprintf() could be thought of as a convenience for the combination of sprintf and fwrite, but it is a convenience that is used often enough to be worth having.

(There is a small difference between fprintf() and sprintf() if the destination is a serial port, but it is unimportant at the moment.)

  2 Comments

fprintf without the fID, sends the string to the screen only. If fprintf can send to a file or screen or a device, then why separately have sprintf for screen. I also did not understand the difference. If someone can exemplify the difference it would be helpful.

fprintf() sends the string to an output device (screen, file). In an output context, such as assigning to a variable, it returns the number of bytes written. You could store that byte count in a variable or use that byte count in an expression. If you do not have an output context then MATLAB does not return anything. If you do have an output context then as usual for MATLAB if you do not have a semi-colon on the end of the expression, the last returned expression will be displayed using the "ans =" format.

sprintf() does not in itself send the string to an output device. sprintf() always returns a value, which is the formatted string. You can store the string in a variable for later use. If you do not have a semi-colon on the end of the line, then as usual for MATLAB it will helpfully display the last returne value (in this case the formatted string) in the "ans =" format.

Compare

fprintf('hello\n')
fprintf('hello\n');
x = fprintf('hello\n')
disp(x)
sprintf('hello\n')
sprintf('hello\n');
y = sprintf('hello\n')
disp(y)

Note that the sprintf('hello\n'); produced no output, because the return from sprintf() is the string itself without any device output and the semi-colon says not to display the return value.


Answer by Stephen Cobeldick
on 12 May 2015
Edited by Stephen Cobeldick
on 12 May 2015

sprintf has nothing to do any "screen" or file at all, it just creates a string variable in MATLAB's memory... of course you can decide to display that variable on the screen or write it to a file... you could even use fprintf for this!

"the gist of it" is that:

This is what the documentation states on the very first line:

  • sprintf "Format data into string"
  • fprintf "Write data to text file"

Here is a simple example that demonstrates sprintf creating string variables:

>> X = sprintf('world%s','!'); % join two strings using sprintf
>> Y = sprintf('hello %s', X); % join variable X with another string
>> Y
Y =
hello world!

This produced a string variable, just as this does:

>> Z = 'hello world!'
Z =
hello world!

  0 Comments


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!