标签: printf

Re Legacy代码:格式'%d'需要类型为'int'的参数,但参数3的类型为'long unsigned int'[-Wformat]

我经常尝试使用最近的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,代码在这里.

尽管有警告,它仍会构建,但我更愿意知道如何防止它,
因此结果更有效,并且数据损坏的可能性更小.

拜托,我错过了什么,需要改变?

先感谢您.

c unix printf gcc undefined-behavior

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

将printf和vfprintf封装到另一个函数时,这种差异的原因是什么?

在此示例中,此代码虽然编译它但不会产生正确的结果:

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);

  • 所有输出都没问题.

这里发生了什么 ?

c c++ printf gcc variadic-functions

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

用FS(awk)分隔字符串的所有字符

我虽然这是一个简单的任务,但不是!

输入(管道分隔):

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)

我不明白!如果有人能向我解释......

awk printf

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

snprintf + Pebble

我正在为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 printf sizeof strlen pebble-sdk

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

为什么printf无法编译?

我正在阅读关于C的Kernigan和Ritchie手册.

出现以下示例:

printf("hello, world
");
Run Code Online (Sandbox Code Playgroud)

该书指出C编译器将产生错误消息.编译器究竟如何检测到这一点,为什么这是一个问题?难道它不应该只读取换行符(可能在世界末尾)没有空格吗?

c printf

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

执行fork()时cout vs printf

我试图使用一些测试程序来理解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

有人能解释一下吗?谢谢

c++ printf fork cout

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

奇怪的printf和put语句解释

我在一张SNS相册中看到了这两个陈述,标题是"我见过的最优雅的输出方式"等等.

以下是两个陈述:

printf("%d%c", a, " \n"[i==n]);
puts("YES\0No"+condition * 4);
Run Code Online (Sandbox Code Playgroud)

我不知道他们在做什么以及他们是如何工作的.有人会向我解释一下吗?谢谢.

c printf puts

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

循环时BASH中echo / printf中没有换行符

为什么在执行以下脚本时,每个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)

bash printf newline echo while-loop

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

execl之前的打印在输出中不可见

#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)

c linux printf exec waitpid

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

Scala中的类型安全格式化输出

我在想是否可以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?

printf scala

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