2011-11-07 19 views
12

मैं नहीं बल्कि सिर्फ एक स्ट्रिंग का उपयोग होगा, लेकिन हम के रूप में शिक्षक उन्हें नफरत करता है और तरीके से बचने के लिए उन्हें यह पता लगाने के लिए हमें चाहता है नहीं होना चाहिए रहे हैं। तो मैंने एक संरचना का उपयोग करने में देखा, लेकिन हम किताब में इतने दूर नहीं हैं और जब मैं आगे निकलता हूं तो वह उससे नफरत करती है। तो मैं यह करने की सोच रहा था:सी ++ गुजर चार सरणी कार्य करने के लिए

#include <iomanip> 
#include <iostream> 
#include <stdio.h> 

using namespace std; 

void myfunc(char&); 

int main() 
{ 
    char myname[12]; 
    cout<<"enter a name "; 
    cin>>myname; 
    cout<<"myname is "<<myname; 

    cout<<"myname is " << myfunc(myname); 

    getchar(); 
    getchar(); 
    return 0; 
} 

void myfunc(char &myname1) 
{ 
    myname1 = "Billy" 
} 

लेकिन यह काम नहीं करता है और मुझे नहीं पता कि क्यों।

+5

बचना 'std :: स्ट्रिंग' एक सीखने व्यायाम (और शायद फिर भी) के रूप में छोड़कर पूरी तरह मूर्खतापूर्ण है। यह मानक पुस्तकालय का एक हिस्सा है, और यह नग्न चार पॉइंटर्स को प्रतिस्थापित करने और उनके साथ जुड़े विभिन्न समस्याओं को खत्म करने के लिए डिज़ाइन किया गया है। आपका शिक्षक सी जंकी जैसा लगता है जो आपको सी ++ में सी कोड लिखना चाहता है। – cHao

उत्तर

7

एक तरह से इस तरह यह करने के लिए है:

myfunc(myname); 
cout<<"myname is " << myname; 

हालांकि आपको अपने प्रारंभिक बफर अतिप्रवाह के लिए नहीं सावधान रहना होगा:

void myfunc(char *myname1) 
{ 
    strcpy(myname1,"Billy"); 
} 

तुम भी करने के लिए अपने मुख्य बदलने के लिए की आवश्यकता होगी।

कारण है कि अपने मूल कोड काम नहीं करता क्योंकि आप char संकेत करने के लिए तार असाइन नहीं कर सकते है। इसके बजाय आपको स्ट्रिंग को char* पर कॉपी करना होगा।

+0

ओपी बताता है कि वह एक स्ट्रिंग –

+1

का उपयोग नहीं कर सकता है, अंतिम वाक्य को हटा दिया गया है। – Mysticial

1

पैरामीटर पैरामीटर के रूप में पारित होने पर पॉइंटर्स में भंग हो जाते हैं।
तो आसान तरीका है कि आप चाहते हैं:

char* myfunc(char* myname1) 
{ 
    return myname1; 
} 

आप को दिखाने के लिए जा रहे थे, तो आप संदर्भ द्वारा सरणी पारित कर सकते हैं।
लेकिन यदि आप आगे नहीं पढ़ सकते हैं तो आप इसका उपयोग नहीं कर पाएंगे।

char* myfunc(char (&myname1)[12]) // Note you can only pass arrays of size 12 
{        // to this function so it is limited in use. 
    return myname1; 
} 

यह अधिक उपयोगी आप इसे टेम्पलेट सकता है, हालांकि बनाने के लिए:

template<int SIZE> 
char* myfunc(char (&myname1)[SIZE]) 
{ 
    return myname1; 
} 
0

myname1 = "Billy" एक स्ट्रिंग नकल नहीं है कि यह प्रतियां युक्त "बिली"

लें निरंतर स्थानीय स्मृति के लिए सूचक एक चार के रूप में strncpy() या memcpy()

0

यह दर्रा पर एक नज़र * बजाय एक चार &। आप इस कोड में एक वर्ण सरणी के सूचक के बजाय एक वर्ण के संदर्भ में गुजर रहे हैं।

इसके अलावा टीआर चार का मान सेट करने * एक बार आप समारोह में हो strncpy (यह गूगल) का उपयोग करें।

0

शून्य myfunc (चार &); यह समस्या है कि इसे char * में लेना चाहिए, न कि एक चार संदर्भ जो आपने किया था।

और समारोह उपयोग strcpy (चार * गंतव्य, चार * स्रोत) में;

4

कोड की यह पंक्ति गलत है:

cout<<"myname is " << myfunc(myname); 

myfunc() कुछ भी वापस नहीं करता है, अपनी वापसी प्रकार void है।

उपयोग करके देखें:

char* myfunc(char *myname1) 
{ 
    strcpy(myname1,"Billy"); 
    return myname; 
} 

या

myfunc(myname); 
cout<<"myname is " << myname; 
संबंधित मुद्दे