70,020
社区成员




char* msg = new char[100];
sprintf_s(msg, ...);
char mag[100];
sprintf_s(msg, ...);
函数原型:
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
template <size_t size>
int sprintf_s(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
MSDN给出了答案。template <size_t size>
int sprintf_s(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
int _tmain(int argc, _TCHAR* argv[])
{
char filename[1024];//预先分配缓冲区
char path1[128] = "D:\\Program\\Tesseract-OCR\\tesseract.exe";
char path2[128] = "D:\\Program\\Tesseract-OCR\\";
char path3[128] = "D:\\Program\\Tesseract-OCR\\txt";
char path4[128] = "-l chi_sim";
sprintf_s(filename,1024, "%s %s %s %s",path1,path2,path3,path4); //无论这里是否有1024这个参数,都可以编译通过
return 0;
}
在VS2010下测试,有疑问啊
... ...
char* filename = new char[1024]; //这样就会报出编译错误
char path1[128] = "D:\\Program\\Tesseract-OCR\\tesseract.exe";
char path2[128] = "D:\\Program\\Tesseract-OCR\\";
char path3[128] = "D:\\Program\\Tesseract-OCR\\txt";
char path4[128] = "-l chi_sim";
sprintf_s(filename,1024,"%s %s %s %s",path1,path2,path3,path4);
delete []filename;
return 0;
... ...
就可以,改成下面:
char filename[1024];//这个可以
char* filename = new char[1024]; //这样就会报出编译错误
char path1[128] = "D:\\Program\\Tesseract-OCR\\tesseract.exe";
char path2[128] = "D:\\Program\\Tesseract-OCR\\";
char path3[128] = "D:\\Program\\Tesseract-OCR\\txt";
char path4[128] = "-l chi_sim";
sprintf_s(filename,"%s %s %s %s",path1,path2,path3,path4);
delete []filename;
#include "stdafx.h"
#include "stdio.h"
int _tmain(int argc, _TCHAR* argv[])
{
//char filename[1024];//这个可以
char* filename = new char[1024]; //这样就会报出编译错误
char path1[128] = "D:\\Program\\Tesseract-OCR\\tesseract.exe";
char path2[128] = "D:\\Program\\Tesseract-OCR\\";
char path3[128] = "D:\\Program\\Tesseract-OCR\\txt";
char path4[128] = "-l chi_sim";
sprintf_s(filename,"%s %s %s %s",path1,path2,path3,path4);
delete []filename;
return 0;
}
使用
char* filename = new char[1024];
就会报出如下错误:
error C2664: 'int sprintf_s(char *,size_t,const char *,...)' : cannot convert parameter 2 from 'const char [12]' to 'size_t'
void func2(char **pMsg)
{
......
sprintf_s(*pMsg, ...);
......
}
void func1()
{
char msg[100];
func2(&msg);
}