标签: printf

如何将两个32位整数组合成一个64位整数?

我有一个计数寄存器,它是由两个32位无符号整数,一个用于值(最显著字)的高32位,以及其他为值(至少显著字)的低32位.

在C中组合这两个32位无符号整数然后显示为大数的最佳方法是什么?

具体来说:

leastSignificantWord = 4294967295; //2^32-1

printf("Counter: %u%u", mostSignificantWord,leastSignificantWord);
Run Code Online (Sandbox Code Playgroud)

这打印很好.

当数字增加到4294967296时,我有它,所以最少有意思的W擦除为0,而且最重要的是Word(最初为0)现在为1.整个计数器现在应该读取4294967296,但是现在它只读取10,因为我只是连接1个来自最重要的词,0个来自最不重要的词.

我怎么能让它显示4294967296而不是10?

c printf

22
推荐指数
2
解决办法
5万
查看次数

了解sprintf(...)的危险

OWASP说:

"诸如strcpy(),strcat(),sprintf()和vsprintf()之类的C库函数对空终止字符串进行操作,并且不执行边界检查."

sprintf将格式化数据写入字符串int sprintf(char*str,const char*format,...);

例:

sprintf(str, "%s", message); // assume declaration and 
                             // initialization of variables
Run Code Online (Sandbox Code Playgroud)

如果我理解OWASP的评论,那么使用sprintf的危险就是那样

1)如果消息的长度> str的长度,则存在缓冲区溢出

2)如果消息没有以null结尾\0,则消息可能被复制到超出消息内存地址的str,导致缓冲区溢出

请确认/否认.谢谢

c++ printf

22
推荐指数
2
解决办法
4万
查看次数

在命令行上将字符串转换为十六进制

我正在尝试48 65 6c 6c 6f使用命令行尽可能高效地将"Hello"转换为十六进制.

我试过看printf谷歌,但我无法到达任何地方.

任何帮助非常感谢.

提前谢谢了,

linux string printf command-line hex

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

PHP中变量扩展与sprintf的性能

关于性能,做什么之间有什么区别:

$message = "The request $request has $n errors";
Run Code Online (Sandbox Code Playgroud)

$message = sprintf('The request %s has %d errors', $request, $n);
Run Code Online (Sandbox Code Playgroud)

用PHP?

我会说调用函数涉及更多的东西,但我不知道PHP在幕后扩展变量名称是做什么的.

谢谢!

php string performance printf variable-expansion

22
推荐指数
4
解决办法
2万
查看次数

有没有办法让printf()正确打印出一个数组(浮点数,比方说)?

我相信我已经仔细阅读了整个printf()文档,但是找不到任何方法可以将它打印出来,例如,10元素数组的元素float(s).

例如,如果我有

float[] foo = {1., 2., 3., ..., 10.};
Run Code Online (Sandbox Code Playgroud)

然后我想要一个单一的陈述,如

printf("what_do_I_put_here\n", foo);
Run Code Online (Sandbox Code Playgroud)

哪个会打印出以下内容:

1. 2. 3. .... 10.
Run Code Online (Sandbox Code Playgroud)

有没有办法在香草C中做到这一点?

c printf

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

执行printf()和分段错误

#include<stdio.h>

int main()
{
    char *name = "Vikram";
    printf("%s",name);
    name[1]='s';
    printf("%s",name);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

终端上没有打印输出,只是出现分段故障.但是当我在GDB中运行它时,我得到以下 -

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400525 in main () at seg2.c:7
7       name[1]='s';
(gdb) 
Run Code Online (Sandbox Code Playgroud)

这意味着程序在第7行接收SEG故障(显然我不能在常量字符数组上写入).那么为什么不执行第6行的printf()?

c printf segmentation-fault

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

我应该如何在C++的类方法中正确使用__attribute __((format(printf,x,y)))?

我正在尝试为调试打印定义一个类方法,其行为类似于printf:

inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))
Run Code Online (Sandbox Code Playgroud)

这抱怨:

error: format string argument not a string type
Run Code Online (Sandbox Code Playgroud)

我记得类方法声明有一个隐式this参数,所以我将参数的位置更改为2,3:

inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))
Run Code Online (Sandbox Code Playgroud)

现在它编译,但看起来像参数被移位,就好像this参数被视为参数列表的一部分.

如何判断this不属于我要打印的字符串的函数?

c++ printf gcc string-formatting

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

如何在Matlab中显示(打印)矢量?

我有一个矢量x = (1, 2, 3),我想显示(打印)它Answer: (1, 2, 3).

我尝试了很多方法,包括:

disp('Answer: ')
strtrim(sprintf('%f ', x))
Run Code Online (Sandbox Code Playgroud)

但我仍然无法以我需要的格式打印它.

有人能指出我的解决方案吗?

编辑: 两个值和(长度)x都不提前知道.

matlab printf disp

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

printf浮点数的可变小数位数

我找到了有趣的格式来打印非终止的固定长度字符串,如下所示:

char newstr[40] = {0};
sprintf(newstr,"%.*s",  sizeof(mystr), mystr);
Run Code Online (Sandbox Code Playgroud)

所以我想也许在printf命令下有一种打印浮点数的方法......

"%8.2f"

能够选择整数的小数位数.

像这样的东西:

sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)
Run Code Online (Sandbox Code Playgroud)

编辑 - 解决方案:(
用于将浮点数舍入和清除到所需精度).

int precision = 2;  
char kolf[16] = {0};  
sprintf(kolf, "%8.*f", precision, mystruct.myfloat);  
float kol = atof(kolf);  
Run Code Online (Sandbox Code Playgroud)

c printf

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

Windows上未签名的__int64的printf格式

我需要打印一个ULONGLONG值(unsigned __int64).我应该使用什么格式printf?我%llu在另一个问题中找到了,但他们说它只适用于linux.

谢谢你的帮助.

c c++ windows printf unsigned

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