我对sprintf的理解是将需要的内容打印到一个字符串中。MSDN上的例子是这样的:#include <stdio.h>void main( void )
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f; /* Format and print various data: */
j = sprintf( buffer, "\tString: %s\n", s );
j += sprintf( buffer + j, "\tCharacter: %c\n", c );
j += sprintf( buffer + j, "\tInteger: %d\n", i );
j += sprintf( buffer + j, "\tReal: %f\n", fp ); printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}我想问的是:
buffer是字串,j是数,怎么可以加起来呢?最后得到的buffer怎么又会是累加的数据呢?
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f; /* Format and print various data: */
j = sprintf( buffer, "\tString: %s\n", s );
j += sprintf( buffer + j, "\tCharacter: %c\n", c );
j += sprintf( buffer + j, "\tInteger: %d\n", i );
j += sprintf( buffer + j, "\tReal: %f\n", fp ); printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}我想问的是:
buffer是字串,j是数,怎么可以加起来呢?最后得到的buffer怎么又会是累加的数据呢?
buffer和j相加表示的是从buffer这个位置开始的第j个字符的指针(也就是buffer[j]的地址)!
如题:
j = sprintf( buffer, "\tString: %s\n", s ); 把数据拷贝到buffer中,j表示一共拷贝了多少字节到buffer中。
j += sprintf( buffer + j, "\tCharacter: %c\n", c ); 把数据拷贝到buffer+j开始的缓冲区中,这时j则等于到现在为止一共拷贝了多少数据到以buffer开始的缓冲区中。
以下类推!
像sprintf的UNICODE宏定义是_stprintf
strcpy ===> _tcscpy
sprintf函式定义如下:
int sprintf (char * szBuffer, const char * szFormat, ...) ;
第一个参数是字符缓冲区;后面是一个格式字符串。Sprintf不是将格式化结果标准输出,而是将其存入szBuffer。该函式返回该字符串的长度。
vsprintf是sprintf的一个变形,它有三个参数。vsprintf用于执行有多个参数的自订函式,类似printf格式。vsprintf的前两个参数与sprintf相同:一个用于保存结果的字符缓冲区和一个格式字符串。第三个参数是指向格式化参数数组的指针。实际上,该指针指向在堆栈中供函数呼叫的变量。(学自《programming windows》by Charles Petzold)
主要是为了写出既能按ASCII编译又能按Unicode编译的单一原始码档案。
一种解决方法就是:使用Microsoft Visual C++包含的TCHAR.H表头档案。
Microsoft Visual C++包含的TCHAR.H表头档案不是ANSI C标准的一部分,
因此那里定义的每个函式和宏定义的前面都有一条底线。