标签: printf

17
推荐指数
2
解决办法
1830
查看次数

在没有换行符的情况下显示MATLAB中的信息

有没有办法在没有结束换行的情况下从MATLAB程序输出/显示信息?

我的MATLAB程序偶尔会输出一个数字.在输出数字之间,程序会执行许多其他操作.这是一个主要用于表示某种进展的构造,每次都不能有换行,只是为了让它对用户更具可读性.这大约是我正在寻找的:

Current random seed:
4 7 1 1 
Run Code Online (Sandbox Code Playgroud)

如果程序仍然像以前一样做,那么程序的下一个输出将在同一行上.

我已经阅读了有关disp,sprintf和格式的文档,但还没有找到我正在寻找的内容.这并不意味着它不存在.;)

formatting matlab printf disp

17
推荐指数
1
解决办法
1万
查看次数

为什么sprintf()输出什么?

我之前从未使用过这些函数,但在阅读了很多关于sprintf()之后,我决定知道它.

所以我继续做下面的事情.

function currentDateTime() {
  list($micro, $Unixtime) = explode(" ",microtime());
  $sec= $micro + date("s", $Unixtime);
  $sec = mb_ereg_replace(sprintf('%d', $sec), "", ($micro + date("s", $Unixtime)));
  return date("Y-m-d H:i:s", $Unixtime).$sec;
}

sprintf(currentDateTime());
Run Code Online (Sandbox Code Playgroud)

它什么都不打印.另一方面使用printf()函数:

printf(currentDateTime());
Run Code Online (Sandbox Code Playgroud)

它打印结果就好了.那么这两个函数之间的区别是什么?如何正确使用sprintf()函数?

php printf

17
推荐指数
3
解决办法
1万
查看次数

使用snprintf避免缓冲区溢出

我这样使用snprintf以避免缓冲区溢出:

char err_msg[32] = {0};
snprintf(err_msg, sizeof(err_msg) - 1, "[ ST_ENGINE_FAILED ]");
Run Code Online (Sandbox Code Playgroud)

-1如果字符串长度超过32个字节,我为null终止符添加了保留空间.

我的想法是否正确?

平台:

  • GCC 4.4.1
  • C99

c printf

17
推荐指数
3
解决办法
3万
查看次数

使用printf和cout获得不同的输出 - C++

我有一个我想要打印的字符串.当我使用cout它时,它输出完美但是使用printf它会损坏它.

这是代码:

int main ( int argc, char *argv[] )
{
    // Check to make sure there is a single argument
    if ( argc != 2 )
    {
        cout<<"usage: "<< argv[0] <<" <filename>\n";
        return 1;
    }

    // Grab the filename and remove the extension
    std::string filename(argv[1]);
    int lastindex = filename.find_last_of("."); 
    std::string rawname = filename.substr(0, lastindex);

    cout << "rawname:" << rawname << endl;
    printf("rawname: %s", rawname);

}
Run Code Online (Sandbox Code Playgroud)

cout给我"rawname:文件"
printf给了我"rawname:",然后一串字符的波浪

c++ string printf

17
推荐指数
3
解决办法
1万
查看次数

fprintf是否在引擎盖下使用malloc()?

我想要一个最小的o-damn-malloc-just-failed处理程序,它将一些信息写入文件(可能只是标准错误).我更喜欢使用fprintf()而不是write(),但如果fprintf()本身尝试使用malloc(),则会失败.

是否有一些保证,无论是在C标准,还是只是在glibc,fprintf不会这样做?

c malloc printf stdio

17
推荐指数
2
解决办法
7027
查看次数

传入_Generic宏的不兼容的指针类型

以下代码生成2个警告,这些警告在问题标题中描述.

#include <stdio.h>

static void _print_f(float *f){printf("float : %f\n", *f);}
static void _print_i(int *i)  {printf("int   : %d\n", *i);}

#define print(num) _Generic((num), \
    int*   : _print_i(num),        \
    float* : _print_f(num))


int main(void)
{
    print((&(int){10}));
    print((&(float){10.f}));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

int   : 10
float : 10.000000
Run Code Online (Sandbox Code Playgroud)

我知道,这个宏可以写成如下:

#define print(num) _Generic((num), \
    int*   : _print_i,             \
    float* : _print_f)(num)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不会有任何警告,但我的例子是我写的一个虚拟片段来证明问题.在我的真实代码库中,我选择了以前的解决方案,因为其他一些"默认"但类型特定的参数需要传递给选定的函数.

所以问题是:即使宏正在按预期工作,输出正是我所期望的,为什么会产生警告?


旗帜与环境:

/* Mac OS X 10.9.4
   Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) */
cc -Wall -v -g -std=c11 …
Run Code Online (Sandbox Code Playgroud)

c macros printf clang c11

17
推荐指数
1
解决办法
1543
查看次数

为什么不使用%v来打印int和string

我知道打印int我们可以使用%d,string我们可以使用,%s 但我们仍然可以%v用来打印它们.那么如果我总是用它%v来打印呢?如果我这样做会发生什么问题?

string formatting printf go

17
推荐指数
1
解决办法
5630
查看次数

对于所有类型,%p格式说明符都需要显式转换为void*,而printf中的char*

%p在Stack Overflow中已经阅读了很多关于C语言中格式说明符用法的答案,但似乎没有一个解释为什么void*所有类型都需要显式转换为char*.
我当然知道这样一个事实,即强制转换的要求void*与使用可变函数(参见本答案的第一条评论)有关,而非强制性要求.

这是一个例子:

int i;    
printf ("%p", &i);
Run Code Online (Sandbox Code Playgroud)

产生关于类型不兼容性的警告,并且&i应该进行铸造void*(根据标准的要求,再次参见此处).

虽然这一大块代码能够顺利编译,但没有关于类型转换的任何投诉:

char * m = "Hello";    
printf ("%p", m);
Run Code Online (Sandbox Code Playgroud)

如何char*从这一要求中"解脱"?

PS:可能值得补充的是我在 x86_64架构上工作,因为指针类型大小依赖于它,并且使用 gcc作为linux上的-W -Wall -std=c11 -pedantic编译器和编译选项.

c printf types casting void-pointers

17
推荐指数
3
解决办法
1157
查看次数

为什么C和Java回合的浮动不同?

考虑浮点数0.644696875。让我们使用Java和C将其转换为带有八个小数的字符串:

爪哇

import java.lang.Math;
public class RoundExample{
     public static void main(String[] args){
        System.out.println(String.format("%10.8f",0.644696875));
     }
}
Run Code Online (Sandbox Code Playgroud)

结果:0.6446968 8

自己尝试:http : //tpcg.io/oszC0w

C

#include <stdio.h>

int main()
{
    printf("%10.8f", 0.644696875); //double to string
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:0.6446968 7

自己尝试:http : //tpcg.io/fQqSRF

问题

为什么最后一位数字不同?

背景

数字0.644696875无法完全表示为机器编号。它表示为分数2903456606016923/4503599627370496,其值为0.6446968749999999

诚然,这是一个极端情况。但是我真的很好奇差异的根源。

相关:https : //mathematica.stackexchange.com/questions/204359/is-numberform-double-rounding-numbers

c java floating-point printf

17
推荐指数
2
解决办法
308
查看次数

标签 统计

printf ×10

c ×6

formatting ×2

string ×2

c++ ×1

c11 ×1

casting ×1

clang ×1

disp ×1

floating-point ×1

go ×1

java ×1

macros ×1

malloc ×1

matlab ×1

php ×1

scanf ×1

stdio ×1

types ×1

void-pointers ×1