2011-10-25 7 views
10

मैं एक स्ट्रिंग और एक स्ट्रिंग से बाहर एक पूर्णांक sscanf का उपयोग कर निकालने के लिए कोशिश कर रहा हूँ:सी - काम नहीं कर रहा sscanf

#include<stdio.h> 

int main() 
{ 
    char Command[20] = "command:3"; 
    char Keyword[20]; 
    int Context; 

    sscanf(Command, "%s:%d", Keyword, &Context); 

    printf("Keyword:%s\n",Keyword); 
    printf("Context:%d",Context); 

    getch(); 
    return 0; 
} 

लेकिन यह मुझे उत्पादन देता है:

Keyword:command:3 
Context:1971293397 

मैं इस ouput की उम्मीद:

Keyword:command 
Context:3 

sscanf बर्ताव करता है इस तरह क्यों पड़ता है? आपकी मदद के लिए अग्रिम धन्यवाद!

+1

क्या कोई अच्छा कारण है कि आप 'sscanf' के परिणाम की जांच नहीं करते हैं? –

उत्तर

14

sscanf उम्मीद %s टोकन खाली स्थान के, सीमांकित किया जाना है (टैब, अंतरिक्ष, न्यू लाइन) ताकि आप स्ट्रिंग और जो जगह है करना होगा:

एक बदसूरत के लिए

तुम कोशिश कर सकते हैक जा रहा है:

sscanf(Command, "%[^:]:%d", Keyword, &Context); 

जो कोलन से मेल नहीं खाता टोकन को मजबूर करेगा।

+0

आपका मतलब है, कोई तरीका नहीं है कि मैं ":" को डिलीमीटर के रूप में उपयोग कर सकता हूं? – dpp

+0

स्ट्रिंग और एक इंटीजर को "कमांड: 3" से निकालने के लिए संभव नहीं है? – dpp

+0

हां, यह है: 'sscanf (कमांड,"% 7s:% d ", कीवर्ड, और संदर्भ); दूसरी तरफ, यह केवल उन आदेशों को स्वीकार करता है जो 7 वर्ण लंबा हैं। – fritzone

2

यहां %[ सम्मेलन का उपयोग करें। इसके उत्पादन के रूप में http://linux.die.net/man/3/scanf

#include <stdio.h> 

int main() 
{ 
    char *s = "command:3"; 
    char s1[0xff]; 
    int d; 
    sscanf(s, "%[^:]:%d", s1, &d); 
    printf("here: %s:%d\n", s1, d); 
    return 0; 
} 

जो देता है "3 यहाँ:: कमांड" scanf के मैनुअल पृष्ठ देखें।

5

यदि आप एसएसकेएनएफ का उपयोग करने के बारे में विशेष नहीं हैं, तो आप हमेशा स्ट्रेटोक का उपयोग कर सकते हैं, क्योंकि आप अपनी स्ट्रिंग को टोकननाइज़ करना चाहते हैं।

char Command[20] = "command:3"; 

    char* key; 
    int val; 

    key = strtok(Command, ":"); 
    val = atoi(strtok(NULL, ":")); 

    printf("Keyword:%s\n",key); 
    printf("Context:%d\n",val); 

यह मेरी राय में बहुत अधिक पठनीय है।

+0

धन्यवाद, लेकिन मैं 'sscanf' का अध्ययन करना चाहता हूं। – dpp

+0

मैंने इसे अपने कोड में धन्यवाद दिया है, धन्यवाद। – dpp