3

程序崩溃的以下代码有什么问题 - 给出分段错误。我正在使用 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);   
} 
4

3 回答 3

7

您正在%s为 type 的参数使用格式说明符uint8_t,这应该是%u,并且您应该将值强制转换unsigned int为匹配。这使您不必关心确切的类型和调整格式化程序(正如评论者所建议的那样)。

此外,当然,我们很难知道缓冲区是否足够大。如果你有它,你可以用它snprinf()来避免这种情况。

于 2012-05-25T11:28:35.413 回答
1

这里

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可以使用%dResultint(int)Result

于 2012-05-25T11:29:08.780 回答
0

结果不是 char*,您可能需要 %d

于 2012-05-25T11:30:04.490 回答