我正在编写一个程序,使用打印输入的十六进制转储.但是,当传入换行符,制表符等并破坏输出格式时,我遇到了问题.
我怎样才能使用printf(或我猜想)打印'\n'而不是打印实际的换行符?我只需要为此进行一些手动解析吗?
编辑:我动态地接收我的数据,它不仅仅是我所关注的,而是所有符号.例如,这是我的printf语句:
printf("%c", theChar);
Run Code Online (Sandbox Code Playgroud)
当换行符作为theChar传入时,如何进行此打印\n但是当theChar是有效的可打印字符时仍然使其打印正常文本?
我看了看但找不到合适的答案.
我想知道printf是如何工作的,如下所示:
char arr[2] = {5,6};
printf ("%d%d",arr[0],arr[1]);
Run Code Online (Sandbox Code Playgroud)
我认为printf只是遍历格式,当它包含%d时,例如它从它的当前位置读取4个字节...但是这是错误的,因为上面的工作完美.
那么,我哪里错了?
对于做字符串连接,我一直在做基础strcpy,strncpy字符*缓冲区.然后我了解了snprintf和朋友们.
我应该坚持我的strcpy,strcpy+ \0终结?或者我应该snprintf在将来使用?
我想让我的程序打印一些东西,然后等待几秒钟然后在同一行中打印其他东西.我试着把它写成:
printf ("bla bla bla");
sleep (2);
printf ("yada yada yada\n");
Run Code Online (Sandbox Code Playgroud)
但在输出中我会等待2秒然后我将整行打印为一行.当我尝试将输出放在不同的行中时,它会暂停打印.
如何在同一行中暂停打印?
*在Linux上工作
我想在MySQL查询中使用sprintf()和date_format.
这是查询:
mysql_select_db($database_exdb, $expdb);
$query_eventeditrs = sprintf("SELECT eventid, groupid, title, DATE_FORMAT(dateofevent, '%W, %M %d, %Y'), timeofevent, location, details, presenter, bio FROM events WHERE eventid = %s", GetSQLValueString($colname_eventeditrs, "int"));
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
“Warning: sprintf() [fun
ction.sprintf]: Too few arguments. Query was Empty”
Run Code Online (Sandbox Code Playgroud)
Plz的帮助
假设我正在打印一个字符串,如下所示:
printf("%s", s);
Run Code Online (Sandbox Code Playgroud)
我们可以假设这个函数的渐近复杂性是什么?
它是O(n),其中n是strlen(s) - 它的长度是多少?或者它是某种方式O(1),恒定的时间.或者不同的东西?不过,我认为你需要知道printf是如何实现的.任何见解都表示赞赏!
(我应该澄清一点,我说的是C而不是C++,但我怀疑它们的实现方式不同)
编辑:将格式字符串添加到printf()
我目前正在为字符串操作编写代码.作为其中的一部分,我正在使用vsnprintf().
但是,编译器会在错误消息下面闪烁:
dont_call: vsnprintf(). Invokation of a potentially dangerous function
that could introduce a vulnerability. remediation:
Recommendation: Use vsprintf_s() instead!
Run Code Online (Sandbox Code Playgroud)
结果与vsprintf_s()预期不符.
vsnprintf()和之间有什么区别vsprintf_s()?
我正在使用fprintfMatlab中的命令将数据写入输出文本文件.如何写一个数字输出文件,例如1.12345678e-001,在指数三位数?
formatSpec = '%1.8e\n';
Run Code Online (Sandbox Code Playgroud)
给出1.12345678e-01,而不是期望的结果!
但按照给出的说明没有解决问题!
我刚刚遇到这种奇怪的情况,我无法解释它.我真的很好奇,最重要的事情发生了什么.我有这个示例代码:
#include <stdio.h>
#include <stdint.h>
int main()
{
int64_t qty = 900;
double p = 74.45;
printf( "%f|%ld\n", p, qty );
printf( "%f|%ld\n", qty, p );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在第二个printf中,我提供了错误订单中的参数,更不用说类型错误了.但是,我仍然得到两个CORRECT输出?奇怪的是......用gcc 7.2编译:
$ ./a.out
74.450000|900
74.450000|900
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我正在尝试一个非常简单的printf测试:
printf "%.16f\n" 5.10
Run Code Online (Sandbox Code Playgroud)
在linux上,我得到以下输出:5.100000000000000000这是预期的。
但是在OS / X上进行的完全相同的测试会产生以下结果: 5.0999999999999996
为什么printf产生不同的输出?
编辑:这不是C代码,printf还是命令行实用程序,非常适合脚本和测试。
下面的等效C程序产生5.100000000000000000:
printf "%.16f\n" 5.10
Run Code Online (Sandbox Code Playgroud)
编辑2:情节变厚...使这对于linux用户更有趣,如果我以的方式运行此命令,则会nobody得到与OS / X相同的行为:
chqrlie$ printf "%.18f\n" 5.10
5.100000000000000000
chqrlie$ su nobody -c 'printf "%.18f\n" 5.10'
5.099999999999999645
Run Code Online (Sandbox Code Playgroud)