如何與char * C.按照正確複製到一個無符號字符*是我的代碼轉換的char *爲unsigned char *
int main(int argc, char **argv)
{
unsigned char *digest;
digest = malloc(20 * sizeof(unsigned char));
strncpy(digest, argv[2], 20);
return 0;
}
我想正確複製的char *數組爲unsigned char *陣列。添加更多的信息,我的要求是,來電者提供一個SHA消化的主要功能是在命令行的字符串和主要功能內部保存:我用上面的代碼
warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness
編輯收到以下警告它在消化。 SHA摘要最好用一個無符號字符表示。
現在的問題是我無法更改主函數(** char)的簽名,因爲主函數會將其需要的其他參數解析爲char *而不是unsigned char *。
散列摘要通常表達爲摘要十六進制值的ASCII表示(例如「b6379dab2c ...」)。一個'char'對此絕對好! –
@oli所以基本上演員也應該沒有任何問題strncpy((char *)digest,argv [2],20)正常工作;因爲我們正在處理ASCII? – Rajiv
@Rajiv:有兩種不同的方式來表示一個SHA-1摘要,它是160位。其中一種方法是使用20個8位字節,'unsigned char'是最好的類型。另一種方法是使用ASCII表示法,其中每個字符都是十六進制數字,代表4位,因此需要其中的40位。顯然'strncpy'不會在它們之間進行轉換。 –