मेरे पास दशमलव मूल्यों के प्रारूप में तारों को तोड़ने के लिए दो सहायक कार्य हैं। "23.00", "2.30"स्ट्रोक और सेगमेंटेशन गलती के साथ समस्या
इस पर विचार करें:
char price[4] = "2.20";
unsigned getDollars(char *price)
{
return atoi(strtok(price, "."));
}
unsigned getCents(char *price)
{
strtok(price, ".");
return atoi(strtok(NULL, "."));
}
अब जब मैं चलाने के नीचे मैं एक विभाजन गलती मिलती है: जब मैं उन्हें अलग से एक निम्नलिखित के बिना चलने
printf("%u\n", getDollars(string));
printf("%u\n", getCents(string));
हालांकि अन्य, वे ठीक काम करते हैं। मुझे यहां क्या समझ नहीं आ रहा है? क्या मुझे स्ट्रोक की रीसेट करने की ज़रूरत है ??
मेरे समाधान:
strtok मैं इस सवाल का जवाब मैं नीचे चुना है से प्राप्त के बारे में ज्ञान के साथ, मैं सहायक कार्यों के कार्यान्वयन के इतना है कि वे स्ट्रिंग में पारित प्रतिलिपि पहले बदल गया है, इस प्रकार मूल स्ट्रिंग परिरक्षण और इस समस्या को रोकने:
#define MAX_PRICE_LEN 5 /* Assumes no prices goes over 99.99 */
unsigned getDollars(char *price)
{
/* Copy the string to prevent strtok from changing the original */
char copy[MAX_PRICE_LEN];
char tok[MAX_PRICE_LEN];
/* Create a copy of the original string */
strcpy(copy, price);
strcpy(tok, strtok(copy, "."));
/* Return 0 if format was wrong */
if(tok == NULL) return 0;
else return atoi(tok);
}
unsigned getCents(char *price)
{
char copy[MAX_PRICE_LEN];
char tok[MAX_PRICE_LEN];
strcpy(copy, price);
/* Skip this first part of the price */
strtok(copy, ".");
strcpy(tok, strtok(NULL, "."));
/* Return 0 if format was wrong */
if(tok == NULL) return 0;
else return atoi(tok);
}
टिप के लिए धन्यवाद, मैंने इसे बोर्ड पर ले लिया है। – Chris