为什么vsprintf只对第一个字符进行操作

时间:2017-11-04 04:54:31

标签: c

以下代码返回以下内容:

Input was: 6789
Vsprintf Buffer: 54

为什么vsprintf缓冲区只返回54?

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

void vout(char *string, char *fmt, ...);
char fmt1 [] = "%d";

int main(void)
{
   char string[32];
   char *xy = "6789";

   vout(string, fmt1, * xy);
   printf("Input was: %s\n", xy);
   printf("Vsprintf Buffer:  %s\n",string);
}

void vout(char *string, char *fmt, ...)
{
   va_list arg_ptr;

   va_start(arg_ptr, fmt);
   vsprintf(string, fmt, arg_ptr);
   va_end(arg_ptr);
}

2 个答案:

答案 0 :(得分:1)

您传递单个字符'6'并使用格式%d打印,因此它会将字符代码打印为整数 - 54

答案 1 :(得分:0)

vsprintf()从arg_ptr读取fmt并打印到字符串。这将不起作用,因为它将占用第一个32位内存块,在这种情况下,包含ascii字符&#39; 6&#39;,并将其作为整数写入字符串。请改用vsscanf。

vsscanf(string, fmt, arg_ptr);