매우 이상한 문제가 있습니다. 헤더 파일클래스 객체를 사용하여 클래스의 구조에 값을 할당합니다.
namespace test
{
class LoadConfigData
{
struct control_params
{
char active[];
char suspended[];
char erased[];
}*ctrl_params;
bool loadConfig();
};
};
하여 Main.cpp
using namespace std;
using namespace test;
namespace test
{
extern LoadConfigData *loadConfigDataobj;
LoadConfigData *loadConfigDataobj = new LoadConfigData;
};
int main()
{
loadConfigDataobj->loadConfig();
cout <<loadConfigDataobj->ctrl_params->active_status_code_v<<endl;
cout <<loadConfigDataobj->ctrl_params->suspended_status_code_v<<endl;
cout <<loadConfigDataobj->ctrl_params->erase_status_code_v<<endl;
return 0;
}
bool LoadConfigData::loadConfig()
{
std::string a = "AC";
std::string b = "SP";
std::string c = "ER";
LoadConfigData::ctrl_params = new LoadConfigData::control_params;
sprintf(loadConfigDataobj->ctrl_params->active,"%s",a.c_str());
sprintf(loadConfigDataobj->ctrl_params->suspended,"%s",b.c_str());
sprintf(loadConfigDataobj->ctrl_params->erased,"%s",c.c_str());
return true;
}
출력 : 여기 내 코드는 각 구조체 멤버의 마지막 복사 된 문자열을 인쇄하는 것을 의미
ER
ER
ER
. 내 코드가 잘못되었습니다.
예. 맞습니다. 크기가 지정되지 않은 배열의 경우 문제였습니다. 크기를 정의하면 내 문제가 해결되었습니다. 감사합니다 :) – sajal
@sajal : 당신이하고있는 것을 정확히 알고 있습니까? 끈이 항상 충분히 커야 확실합니까? 왜'std :: string'을 사용하지 않을까요? 이들이 실제로 구성 데이터 인 경우 입력 길이에 대한 제어가 필요하지 않으며 크래커가 환영 할 안전 문제가 있습니다. 문자열 기능 취약점에 대해 얼마나 알고 있습니까? http://en.wikipedia.org/wiki/Software_vulnerabilities에 대해 자세히 읽어보십시오. 특히 버퍼 오버플로 및 형식 문자열 공격에 대해서는 (독점적 인 것은 아니지만) 특히 그렇습니다. 나는 이것이 생산 코드가 아니고 배우기를 진심으로 희망한다. –
@phresnel : 고맙습니다. 여기서 언급 한 코드는 내가 사용하고있는 코드와 다릅니다. 나는 char 배열의 형태로 데이터를 반환하는 특정 라이브러리를 사용해야하는 데이터베이스에서 데이터를 가져오고 control_params에 저장합니다. 문자열 크기를 알고 있으므로 지금 작동합니다. 하지만 문자열 크기가 나중에 변경되면 코드를 변경하는 것 외에 다른 옵션이 없습니다. – sajal