标签: printf

寻找snprintf()的C源代码

我需要将snprintf()移植到另一个不完全支持GLibC的平台上.

我正在寻找Glibc 2.14源代码中的基础声明.我遵循许多函数调用,但卡在vfprintf()上.然后它似乎调用_IO_vfprintf(),但我找不到定义.宏可能会混淆事物.

我需要查看扫描格式字符串的真实C代码,并计算在输入缓冲区足够大时它将写入的字节数.

我也尝试过查看newlib 1.19.0,但我遇到了_svfprintf_r().我无法在任何地方找到定义.

有人能指出我为snprintf()定义或另一个定义吗?

printf glibc newlib

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

平台与vsprintf和va_list的不一致

背景:我目前正在尝试通过支持处理某些结构来“扩展”标准C格式,类似于Objective-C如何扩展C格式以允许对带有“%@”序列的NSString的支持。

我苦苦挣扎的一个问题是vsprintf在OS X和Linux上的行为似乎有所不同(我已经在Ubuntu 10.10和12.04上进行了测试)。在OS X上,它表现的是我的预期,在调用vsprintf之后,调用va_arg返回ms指针(就像vsprintf函数调用va_arg来获得5一样)。但是,在Linux上,va_list不会从vsprintf更改,并且调用va_arg返回5。

我真的很想找出一种实现此功能的方法,以使其在各个平台之间始终如一地运行。假设您可以期望vsprintf持续更改va_list中的指针是错误的,以便下次调用va_arg时,它返回下一个尚未使用的参数?

我已尽可能简化了代码以演示该问题。在OS X上,此代码输出从malloc返回的指针的正确地址。在Linux上,foo中的ms的值变为5,因此它将输出5。

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>

static void foo(void *, ...);

typedef struct {
    char *value;
} mystruct;

int main(int argc, char *argv[]) {
    mystruct *ms = malloc(sizeof(mystruct));
    foo(NULL, "%d %@", 5, ms);
}

void foo(void *dummy, ...) {
    va_list args;
    va_start(args, dummy);
    char buffer[512];
    int buffer_ptr = 0;
    int i = 0;
    char *format = va_arg(args, char *);

    buffer[0] = '\0';

    for (i = 0; i < strlen(format); i++) …
Run Code Online (Sandbox Code Playgroud)

c printf variadic-functions

4
推荐指数
1
解决办法
1574
查看次数

printf仅提供警告

任何人都可以告诉我为什么不包括stdio.h仍然使用该printf功能只在gcc上发出警告?

警告:内置函数'printf'的不兼容隐式声明

相反,这应该是一个编译错误,因为我们包括一个未声明的函数.

这与链接程序有关吗?请详细说明.

c printf warnings stdio

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

awk print vs printf函数

在awk有两个输出功能:print和printf.

  • 它们的实现是否awk完全不同?
  • 关于性能/速度有什么区别(如果可能的话 - 理论上,不仅仅是time命令行上的" ")?
  • 他们使用相同的系统调用吗?

io awk printf

4
推荐指数
1
解决办法
2762
查看次数

用printf打印char指针char数组?

我正在尝试打印整个单词,而不仅仅是第一个字母.我可以通过循环来做到这一点,但我认为有更好的方法.我正在四处搜索并看到他们将%S更改为%c的答案,但我已经在使用%c,因为它是一个字符数组.

char* words[] = {"my", "word", "list"};
printf("The word: %c",*words[2]);

Results:
The word: l
Run Code Online (Sandbox Code Playgroud)

arrays printf pointers character

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

使用指针,数组不会在C中反向打印

我试图制作一个程序,将10个数字作为输入,并使用C中的指针以相反的顺序输出它们.

    #include<stdio.h>
    #define N 10

    int array[N]; //Global variable


    int main(void) {
    int j;
    int i;

    printf("Enter 10 numbers: ");

    for (i=0;i<N;i++) {
          scanf("%d",(array+(4*i)));    //Works
    }

    for (j=N-1;j<0;j--) {
       printf("%d",array[j]);  //Doesn't print, using *(array+j*4) doesn't 
                                                           //print  also
    }

    printf("\n");
    printf("%d\n",*(array)); //Works so scanf works
    printf("%d\n",*(array+4)); //Works so scanf works
    return 0;

    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试为两个for循环创建一个单独的函数,但它仍然不起作用.我想知道为什么这个for循环不打印但是它下面的两个printfs打印出来.

编辑:

我的新代码是

    #include<stdio.h>
    #define N 10

    int array[N]; //Global variable


    int main(void) {
    int j;
    int i;

    printf("Enter 10 numbers: ");

    for (i=0;i<N;i++) {
          scanf("%d",(array+i));    //Works
    } …
Run Code Online (Sandbox Code Playgroud)

c arrays sorting printf pointers

4
推荐指数
1
解决办法
1171
查看次数

%.在s中的printf语句中的#s格式说明符

请解释输出.是什么%.#s在printf()意思?

#include<stdio.h>
#include <stdlib.h>

int main(int argc,char*argv[]){

    char *A="HELLO";
    printf("%.#s %.2s\n",A,A);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

#s HE
Run Code Online (Sandbox Code Playgroud)

c string printf format-specifiers

4
推荐指数
1
解决办法
5875
查看次数

从自定义printf函数返回一个const char*

我写了一个自定义打印功能.我的问题是我需要返回一个,const char*因为这必须在另一个函数中使用.我根本不知道如何管理......

anotherFunction (const char* text /*Here*/, unsigned __int32 value, unsigned __int64 bigVal);

我知道以下示例/ s不能正常工作.这就是我到目前为止所尝试过的.

const char* CatchMessage (const char *message, ...)
{
    va_list  args;
    va_start (args, message);
    /*?*/
    va_end   (args);
    return message;
}
Run Code Online (Sandbox Code Playgroud)

我只是设法在cmd中获得正确的输出,但实际上我需要它作为返回值.

void CatchMessage (const char *message, ...)
{
    va_list  args;
    va_start (args, message);
    vfprintf (stdout, message, args);
    va_end   (args);
}
Run Code Online (Sandbox Code Playgroud)

呼叫:

CatchMessage ("Some Input %s and %d equals to %d", randString, randNumber, secRandNumber);
Run Code Online (Sandbox Code Playgroud)

应该返回:

"Some Input stuff and 12 equals to 6" …
Run Code Online (Sandbox Code Playgroud)

c c++ printf variadic-functions

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

从Visual Studio 2013迁移到Visual Studio 2015后,调用printf样式的函数会导致警告

我有一个打电话的程序fprintf.在Visual Studio 2013中,编译和执行的所有内容都没有错误和警告.现在该项目已迁移到Visual Studio 2015(没有任何更改),我的大多数fprintf调用都收到以下警告:

C4474: too many arguments passed for format string
Run Code Online (Sandbox Code Playgroud)

大多数这些警告都指向以下代码行:

fprintf (stderr,"Missing header file name. Formant is :\n", pArg);
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?我是否需要重写我的代码,或者导致这些警告的项目设置是否有问题?


我看到,在这篇 MSDN文章中,对这些函数进行了更改:

所有printf和scanf函数的定义都已内联移入stdio.h,conio.h和其他CRT头文件中.

这与我的问题有关吗?这对VS 2015来说只是一个无害的变化,还是存在一个潜在的崩溃导致的陷阱?

c c++ printf visual-studio visual-studio-2015

4
推荐指数
1
解决办法
1770
查看次数

For 循环中的多个 printf 作为初始化、条件和更新的一部分

谁能向我解释为什么它打印 32 以及它如何工作的总体概念?

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c printf loops

4
推荐指数
1
解决办法
476
查看次数