कैसे मैं सही ढंग से एक अहस्ताक्षरित चार * करने के लिए एक चार * कॉपी कर सकता सी के बाद में मेरे कोड हैअहस्ताक्षरित चार में कनवर्ट कर चार * *
int main(int argc, char **argv)
{
unsigned char *digest;
digest = malloc(20 * sizeof(unsigned char));
strncpy(digest, argv[2], 20);
return 0;
}
मैं चाहूँगा सही ढंग से चार कॉपी करने के लिए * अहस्ताक्षरित चार के लिए सरणी * सरणी। अधिक जानकारी जोड़ना, मेरे आवश्यकता है कि फोन करने वाले एक SHA कमांड लाइन पर एक स्ट्रिंग और मुख्य कार्य आंतरिक रूप से बचाने के रूप में मुख्य कार्य करने के लिए पचाने प्रदान करना है: मैं ऊपर कोड
warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness
संपादित का उपयोग कर निम्न चेतावनी मिल यह पाचन में है। एसएए डाइजेस्ट को एक हस्ताक्षरित चार का उपयोग करके सबसे अच्छा प्रतिनिधित्व किया जा सकता है।
अब पकड़ यह है कि मैं मुख्य फ़ंक्शन (** char) के हस्ताक्षर को नहीं बदल सकता क्योंकि मुख्य फ़ंक्शन अन्य तर्कों को पार करता है जिन्हें इसे char * और हस्ताक्षरित char * के रूप में आवश्यक नहीं है।
एक हैश डाइजेस्ट आमतौर पर डाइजेस्ट के हेक्स वैल्यू के एएससीआईआई प्रतिनिधित्व के रूप में व्यक्त किया जाता है (उदाहरण के लिए "' b6379dab2c ... '")। इसके लिए एक 'char' बिल्कुल ठीक है! –
@oli तो मूल रूप से कलाकारों को बिना किसी समस्या के ठीक काम करना चाहिए ((char *) पाचन, argv [2], 20); चूंकि हम ASCII से निपट रहे हैं? – Rajiv
@ राजीव: एसएचए -1 डाइजेस्ट का प्रतिनिधित्व करने के दो अलग-अलग तरीके हैं, जो कि 160 बिट्स हैं। उन तरीकों में से एक 20 8-बिट बाइट्स का उपयोग करना है, और 'हस्ताक्षरित char' इसके लिए सबसे अच्छा प्रकार है। दूसरा तरीका एएससीआईआई प्रतिनिधित्व का उपयोग करना है जिसमें प्रत्येक चरित्र एक हेक्साडेसिमल अंक है, जो 4 बिट्स का प्रतिनिधित्व करता है, और इसलिए उनमें से 40 आवश्यक हैं। स्पष्ट रूप से 'strncpy' उनके बीच परिवर्तित नहीं होने जा रहा है। –