我的代码:
功能:它是一个函数需要三个参数并创建一个文件。
void performLog(string strStoredProcName, int nCount, double time)
{
int tme=(int) time;
int hour=tme/3600;
tme=tme%3600;
int min=tme/60;
tme=tme%60;
int sec=tme;
char *StrLen;
int len = 0;
int lenpass = 0;
StrLen = &strStoredProcName[0];
len = strlen(StrLen);
lenpass = 41 - len;
fstream outFile( "Perform.out", ios_base::out | ios_base::app );
if ( ! outFile )
{
cerr << "Cannot open 'Perform.out' for output" << "\n" << endl;
exit(-1);
}
if (paramLogCreation == false)
{
outFile << "**************Performance Log*********************" << "\n" << endl;
outFile << "DB Type: MYSQL" << "\n" << endl;
outFile << "-----------------------------------------------------------------------------------------" << "\n" << "\t" << "\t" << "\t" << "\t" << "Stored Procedure Statitics" << "\n" << endl;
outFile << "-----------------------------------------------------------------------------------------" << "\n" << endl;
outFile << "Store Procedure Name" << setw(30) << "Execution Count" << setw(30) << "Time Taken to Execute" << "\n" << endl;
paramLogCreation = true ;
}
outFile << strStoredProcName << setw(lenpass) << nCount << setw(20) <<hour<<"::"<<min<<"::"<<sec <<"\n" << endl;
outFile.close();
}
这里我正在为我编写的代码编写一个单元测试用例,这个函数就是其中的一个函数。 请帮帮我,如何解决这个问题。 请问我是C ++的新手,需要知道我犯了错误的地方。
答案 0 :(得分:1)
我认为这是错误:
void performLog(string strStoredProcName, int nCount, double time)
[...]
char *StrLen;
[...]
StrLen = &strStoredProcName[0];
要将字符串转换为char *,您应该使用c_str:
StrLen = new char [strStoredProcName.size()+1];
strcpy (StrLen, strStoredProcName.c_str());
答案 1 :(得分:1)
假设用字符串表示std :;字符串然后当你说:
StrLen = &strStoredProcName[0];
len = strlen(StrLen);
无法保证proc名称包含一个以null结尾的字符串供strlen()使用。如果您想要字符串的长度,请使用 size()成员函数:
len = strStoredProcName.size();
但是,这不应该导致您收到的错误消息,所以请在您的帖子中指明错误是什么!!!
答案 2 :(得分:0)
看起来你得到的错误是在头文件(DM_simtoolTest.h)中,而不是源文件,你似乎已将其粘贴到问题中。
编译器抱怨你的代码试图使用函数指针(这是奇怪的int (*)(int)
语法)来获取字符串。在没有看到相关代码的情况下,我的第一个(疯狂的,推测性的)猜测是你忘记引用你想要测试的函数的名称。我还需要查看标题的来源以正确识别问题。