[英]C string literal handling
程序崩潰的以下代碼有什么問題 - 給出分段錯誤。 我正在使用gcc。
uint8_t result = 1
InsertRow("Name","Details of work",result);
void InsertRow(char *Name, char *Description,uint8_t Result)
{
char Buffer[500];
if(Result==1)
sprintf(Buffer,"<tr><td>%s </td> <td> %s </td> <td> %s </td></tr>",Name,Description,Result);
}
你正在使用%s
格式說明符來表示uint8_t
類型的參數,這應該是%u
,你應該將值轉換為unsigned int
來匹配。 這樣您就不必關心確切的類型並調整格式化程序(如評論者的建議)。
此外,我們很難知道緩沖區足夠大,當然。 如果你有,你可以使用snprinf()
來避免這種情況。
這里
sprintf(Buffer,"<tr><td>%s </td> <td> %s </td> <td> %s </td></tr>",Name,Description,Result);
您正在傳遞Result
(類型為uint8_t
)作為char數組的指針
這意味着積分值將被表示為指針,最有可能指向您無法訪問的內存 - 因此seg。 故障。 您需要使用適當的格式化標志替換第三個%s
以將值打印為整數
注意 :在這種情況下不要直接使用%d
,因為uint8_t
類型不能保證與int
大小相同(很可能不是)。 如果首先將Result
的值轉換為int
( (int)Result
),則可以使用%d
結果不是char *,你可能想要%d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.