簡體   English   中英

C字符串文字處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM