【发布时间】:2015-08-26 16:14:22
【问题描述】:
我正在尝试获取指纹数据(我在另一个代码中创建并存储为文本文件),我必须将其与此代码中的新指纹进行比较。问题是指纹 API 要求将指纹数据作为 char 指针 传递。我正在使用以下代码:
std::ifstream infile("timestamp.txt");
char* text_stream;
std::string line;
if (infile.is_open()){
while ( getline (infile,line)){
if(text_stream){
*text_stream = malloc (1 + strlen (line));
strcpy(text_stream,line);
}
else{
fprintf (stderr, "malloc failure!");
}
}
infile.close();
}
我也尝试过使用其他代码来实现相同的目的,但每次都会遇到这种编译错误:
verifiy.cpp: In function ‘int main()’:
verifiy.cpp:29:47: error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘size_t strlen(const char*)’
*text_stream = malloc (1 + strlen (line));
^
verifiy.cpp:30:31: error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘2’ to ‘char* strcpy(char*, const char*)’
strcpy(text_stream,line);
^
【问题讨论】:
-
除非指纹 API 特别需要
malloc分配的缓冲区,否则不要使用malloc。除非指纹 api 特别想要一个持久字符缓冲区,否则只需使用std::string::c_str()来获取字符指针(即使它确实需要一个持久缓冲区,也只需使用您不会修改的std::string,所以它不会t 移动缓冲区)。