2013-03-06 101 views
1

這可能是一個簡單的問題,但我已經嘗試了一切,並且處於完全損失狀態。使用%s和sprintf沒有給出預期的結果

sprintf(&szDevCapEntry[strlen(szDevCapEntry)], ",%s:%0d", (LPCSTR)szAnalogP, szAnalogChannels); 

行應添加AL:1000但它增加了A:1000,我不知道爲什麼。 szAnalogP絕對是AL。任何任何想法?

編輯:我的功能:

extern "C" UINT __stdcall WriteDriverEntry(MSIHANDLE hInstall) 
{ 
HRESULT hr = S_OK; 
UINT er = ERROR_SUCCESS; 
CString m_DevicePrintName, m_nDeviceNumber, m_DeviceName; 
LPWSTR szDevicePrintName= NULL, szDeviceNum = NULL, szValueBuf = NULL, szAnalogP = NULL, szDigitalP = NULL, szAnalogOP = NULL, szDigitalOP = NULL; 
LPWSTR szDiagnosticP = NULL, szCounterP; 
CHAR szDevCapEntry[256], szBuffer[MAX_PATH]; 
int Index, szAnalogChannels, szDigitalChannels, szAnalogOChannels, szDigitalOChannels, szDiagnosticChannels, szCounterChannels; 

hr = WcaInitialize(hInstall, "WriteDriverEntry"); 
ExitOnFailure(hr, "Failed to initialize"); 

WcaLog(LOGMSG_STANDARD, "Initialized."); 

hr = WcaGetProperty(L"COMPORTNUMBER", &szDeviceNum); 
ExitOnFailure(hr, "failed to get comport number"); 
m_nDeviceNumber = szDeviceNum; 

hr = WcaGetProperty(L"DEVICEPRINTNAME", &szDevicePrintName); 
ExitOnFailure(hr, "failed to get device print name"); 
m_DevicePrintName = szDevicePrintName; 

hr = WcaGetProperty(L"DEVICENAME",&szValueBuf); 
ExitOnFailure(hr, "failed to get device name"); 
m_DeviceName = szValueBuf; 

wsprintf(szDevCapEntry, "%s,%s,%s", (LPCSTR)m_DeviceName, m_nDeviceNumber, (LPCSTR)m_DevicePrintName); 

hr = WcaGetProperty(L"ANALOGPREFIX",&szAnalogP); 
hr = WcaGetIntProperty(L"ANALOGCHANNELS",&szAnalogChannels); 

if (szAnalogChannels != 0) 
{ 
    WcaSetProperty(L"TEST", szAnalogP); 
    sprintf(&szDevCapEntry[strlen(szDevCapEntry)], ",%s:%0d", (LPCSTR)szAnalogP, szAnalogChannels); 
    WcaLog(LOGMSG_STANDARD, szDevCapEntry); 
} 

    if (!UpdateCapEntry(szDevCapEntry)) 
    return -1; 

LExit: 

er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; 
return WcaFinalize(er); 
} 

我有諸如%.2s不同的變化,這樣它會顯示兩個字符,但我只有一次。我很抱歉,如果這是一個太寬泛的問題,但我是一個初學者,不能解決這個問題。我想可能將這個變量轉換爲char可能會起作用,但它給了我相同的結果。

+2

http://sscce.org/ – NPE 2013-03-06 14:35:12

+0

SSCCE速度很快,或者它會因本地化而關閉 – 2013-03-06 14:35:47

+0

如何聲明szAnalogP?你如何分配它?你有沒有檢查過一個實際上是你期望的調試器? – 2013-03-06 14:36:00

回答

1

您顯示的代碼沒有任何問題。

看起來很奇怪的一件事是,您必須明確地將szAnalogP投射到LPCSTR。這表明這是其他類型。我想知道它是否可以是一個你正在解釋的Unicode C字符串是ASCII字符串還是沿着這些行?

+0

嗨,感謝它是一個'LPWSTR',這是一個試錯的錯誤,我忘了再次拿出。 – 2013-03-06 14:42:05

+0

@NatalieCarr:那就是那個問題。 – NPE 2013-03-06 14:43:20

+0

有或沒​​有它給了我相同的結果。 – 2013-03-06 14:45:55

相關問題