我经常尝试使用最近的GCC构建大量旧的模拟器和磁盘和磁带归档工具.有些错误很容易解决,但我不是一个程序员.
我明白了:
itstar.c:在函数'addfiles'中:
itstar.c:194:4:警告:格式'%d'需要类型为'int'的参数,但参数2的类型为'long unsigned int'[-
Wformat ] itstar.c :194:4:警告:格式'%d'需要类型为'int'的参数,但参数3的类型为'long unsigned int'[-Wformat]
从这段代码片段:
/* add files to a DUMP tape */
/* output buffer must have been initialized with resetbuf() */
static void addfiles(int argc,char **argv)
{
int c=argc;
char **v=argv;
while(c--) {
addfile(argc,argv,*v++);
}
if(verify)
printf("Approximately %d.%d' of tape used\n",count/bpi/12,
(count*10/bpi/12)%10);
}
Run Code Online (Sandbox Code Playgroud)
第194行是最后一行,从printf开始.
该文件是itstar.c,来自tapetools,代码在这里.
尽管有警告,它仍会构建,但我更愿意知道如何防止它,
因此结果更有效,并且数据损坏的可能性更小.
拜托,我错过了什么,需要改变?
先感谢您.
在此示例中,此代码虽然编译它但不会产生正确的结果:
void encapsulatePrintf(const char *str, ...) {
va_list argptr;
va_start(argptr, str);
printf(str, argptr);
va_end(argptr);
}
Run Code Online (Sandbox Code Playgroud)
然后在主要: encapsulatePrintf("test str: %i - %s", 22, "test2");
test str: 2293428 - á "但是当我将功能从更改printf为vfprintf(stdout, str, argptr);
这里发生了什么 ?
我虽然这是一个简单的任务,但不是!
输入(管道分隔):
record1|ABCDEFGH
record2|IJKLMNOP
Run Code Online (Sandbox Code Playgroud)
我需要这个输出:
record1|A|B|C|D|E|F|G|H
record2|I|J|K|L|M|N|O|P
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么:
awk 'BEGIN{FS=OFS="|"}{a = split($2, b, ""); for(i=1; i<=a; i++){printf("%s|%s, $1, b[i](i==a? "\n":"|"))}}' input
Run Code Online (Sandbox Code Playgroud)
我得到:
record1|A
record1|B
record1|C
...
Run Code Online (Sandbox Code Playgroud)
我不明白!如果有人能向我解释......
我正在为Pebble开发,我的开局很艰难.
我正在尝试使用2个字符串和2个值填充text_layer,如下所示:
等待AVG:3 MAX:5
由于mallocPebble SDK不支持,我无法使用sprintf,因此我坚持使用snprintf.以下代码仅打印"4":
srand(time(NULL));
int average = (rand()%6)+1;
int maximum = average + 2;
static char *avgText="WAIT AVG: ";
static char *maxText="MAX: ";
snprintf(labelText,sizeof(avgText) + sizeof(average) + sizeof(maxText) + sizeof(maximum),"%s %d %s %d",avgText,average,maxText,maximum);
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.我知道我可以创建4个单独的TextLayers,但这对我来说是最后的手段.
我正在阅读关于C的Kernigan和Ritchie手册.
出现以下示例:
printf("hello, world
");
Run Code Online (Sandbox Code Playgroud)
该书指出C编译器将产生错误消息.编译器究竟如何检测到这一点,为什么这是一个问题?难道它不应该只读取换行符(可能在世界末尾)没有空格吗?
我试图使用一些测试程序来理解fork().我发现cout和printf()之间有不同的行为:
计划1:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>
using namespace std;
int main()
{
printf("Hi , %d\n" , getpid());
fork();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
嗨,9375
嗨,9375
计划2:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>
using namespace std;
int main()
{
cout << "Hi , " <<getpid() << endl;
fork();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
嗨,7277
两个程序之间的唯一区别是第一次使用printf()时打印输出cout
有人能解释一下吗?谢谢
我在一张SNS相册中看到了这两个陈述,标题是"我见过的最优雅的输出方式"等等.
以下是两个陈述:
printf("%d%c", a, " \n"[i==n]);
puts("YES\0No"+condition * 4);
Run Code Online (Sandbox Code Playgroud)
我不知道他们在做什么以及他们是如何工作的.有人会向我解释一下吗?谢谢.
为什么在执行以下脚本时,每个printf(也尝试与echo一起)打印在同一行上?
function read_dom () {
local IFS=\>
read -d \< ENTITY CONTENT
}
cat my_xml_file.xml | \
{ while read_dom; do
printf "(entity:content %s:%s)" $ENTITY $CONTENT
}
Run Code Online (Sandbox Code Playgroud)
现在,这将产生单行输出:
(entity:content member:)(entity:content name:id)(entity:content /name:)
Run Code Online (Sandbox Code Playgroud)
如何将其更改为多行,例如:
(entity:content member:)
(entity:content name:id)
(entity:content /name:)
Run Code Online (Sandbox Code Playgroud) #include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main(void)
{
pid_t Checksum_pid = fork();
if (Checksum_pid < 0)
printf("Fork Failed\n");
else if (Checksum_pid == 0)
{
printf("\nInside Child Process before execl");
//execl("/bin/sleep", "/bin/sleep", "2", NULL);
execl("/bin/ls","ls",(char *)NULL) ;
//exit(EXIT_FAILURE);
printf("\nInside Child Process after execl\n");
exit(EXIT_FAILURE);
}
else
{
int childStatus;
printf("\nInside Parent Process");
sleep(5);
pid_t returnValue = waitpid(Checksum_pid, &childStatus, WNOHANG);
if (returnValue > 0)
{
if (WIFEXITED(childStatus))
printf("\nChild Exit Code: %d\n", WEXITSTATUS(childStatus));
else
printf("\nChild Exit Status: 0x%.4X\n", …Run Code Online (Sandbox Code Playgroud) 我在想是否可以printf在Scala中实现类型安全.假设我们只需要支持字符串文字,%s和%d
我想printf("This is number %d", 0)编译但printf("This is number %d", "abc")不是.
我想printf在编译时检查参数的数量.所以printf("This is a literal")会编译但printf("This is number %d and string %s", 0)不会.
我已经看到它可以用宏来完成.是否绝对需要宏来实现类型安全printf?