我有一个计数寄存器,它是由两个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?
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,导致缓冲区溢出
请确认/否认.谢谢
我正在尝试48 65 6c 6c 6f使用命令行尽可能高效地将"Hello"转换为十六进制.
我试过看printf谷歌,但我无法到达任何地方.
任何帮助非常感谢.
提前谢谢了,
关于性能,做什么之间有什么区别:
$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在幕后扩展变量名称是做什么的.
谢谢!
我相信我已经仔细阅读了整个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中做到这一点?
#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()?
我正在尝试为调试打印定义一个类方法,其行为类似于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不属于我要打印的字符串的函数?
我有一个矢量x = (1, 2, 3),我想显示(打印)它Answer: (1, 2, 3).
我尝试了很多方法,包括:
disp('Answer: ')
strtrim(sprintf('%f ', x))
Run Code Online (Sandbox Code Playgroud)
但我仍然无法以我需要的格式打印它.
有人能指出我的解决方案吗?
编辑:
两个值和(长度)x都不提前知道.
我找到了有趣的格式来打印非终止的固定长度字符串,如下所示:
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) 我需要打印一个ULONGLONG值(unsigned __int64).我应该使用什么格式printf?我%llu在另一个问题中找到了,但他们说它只适用于linux.
谢谢你的帮助.