disp(fprintf())打印fprintf和字符数.为什么?

Max*_*Max 4 matlab printf disp

巧合的是,我发现,它disp(fprintf())打印了fprintf的字符串加上它有的字符数.我知道,这disp()是简化的,但只是出于纯粹的好奇心,我想知道,为什么它打印字符的数量,因为这可能实际上有用的一天.
例如

disp(fprintf('Hi %i all of you',2))
Run Code Online (Sandbox Code Playgroud)

结果是

嗨,你们所有人15

Adr*_*aan 11

问题中提到的特定行为的原因是fprintf使用存储变量调用FILEprintf :

nbytes = fprintf(___)fprintf使用前面语法中的任何输入参数返回写入的字节数.

所以会发生的事情是disp(fprintf(...))首先打印文本fprintf而没有存储变量,但disp只看到存储变量fprintf,即字符串的字节数,因此输出.

另外,如果要显示字符串,则需要STRINGprintf sprintf::

disp(sprintf('Hi %i all of you',2))
Hi 2 all of you
Run Code Online (Sandbox Code Playgroud)

文档向我展示的是,sprintf它专门用于字符串格式化,您可以将其用于向图形添加文本,设置顺序文件名等,同时fprintf写入文本文件.

str = sprintf(formatSpec,A1,...,An)格式化的数据阵列A1,...,An根据formatSpec在列顺序,并将结果返回到字符串str.

fprintf(fileID,formatSpec,A1,...,An)应用formatSpec到阵列中的所有元素A1,... An在列的顺序,并将数据写入到一个文本文件.fprintf使用调用中指定的编码方案fopen.

fprintf(formatSpec,A1,...,An) 格式化数据并在屏幕上显示结果.

因此,在屏幕上显示文本disp(sprintf())fprintf相同,但是如果要将结果存储在必须使用的字符串中,sprintf并且如果要将其写入必须使用的文本文件中fprintf.


hou*_*anb 7

在doc on中fprintf,您会看到输出来自fprintf打印的字节数.所以在这里,fprintf是打印Hi 2 all of youdisp打印返回的15 fprintf.

  • @Max除了HBHB所说的:如果你想避免这种行为,请使用`sprintf`而不是`fprintf` (2认同)