通过指针实现sprintf的问题

问题描述 投票:0回答:1

我试图写一个函数,需要一个缓冲区,一个格式字符串和三个void指针的值,并组成一个字符串,与相同的文本将被打印,如果格式被用于printf。%c 占位符,而且它有很多错误(void值没有被忽略,因为它应该被忽略,dereferencing void * pointer)可能主函数也有问题。

EDIT:

我已经修改了一些代码,谢谢回复者,现在我得到的缓冲区值是这样的。

你有... 美元,你的名字是... 你的字母是...


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int format_to_string(char *buffer, char *format, void *arg1, void *arg2, void
*arg3);
int main(){
char format[20] = "%c bla %c bla %c";
char v1='5'; 
char v2 ='c';
char v3 = 'F';
void *arg1 = &v1;
void *arg2 = &v2;
void *arg3 = &v3;
char str[20];
char *buffer = str;
format_to_string(buffer,format, &arg1, &arg2,&arg3);
printf("%s",buffer);
return 0;

}
int format_to_string(char *buffer, char *format, void *arg1, void *arg2, void
*arg3)
{
    int counter = 0;
    for(int i=0; *format != '\0'; format++, buffer++ )
    {
        if( *format != '%')
        {
            *buffer = *format;
        }
        else
        {
            format++;
            if(*format == 'c')
            {
                if(counter == 0)
                {
                    *buffer =*(char*)arg1;
                    counter++;
                    continue;
                }
                if(counter == 1)
                {
                    *buffer =*(char*)arg2;
                    counter++;
                    continue;
                }
                if(counter == 2)
                {
                    *buffer =*(char*)arg3;
                    counter++;
                    continue;
                }
            }    
        }

    }   
    *buffer = '\0';
    return 0;
}
c pointers void-pointers
1个回答
0
投票

这个调用。

format_to_string(buffer,format, &arg1, &arg2,&arg3);

传递三者的地址 指针 变量的地址,而不是变量本身的地址。

将其改为:

format_to_string(buffer,format, &v1, &v2, &v3);

或者

format_to_string(buffer,format, arg1, arg2, arg3);

然后再试一次。

© www.soinside.com 2019 - 2024. All rights reserved.