2011-11-07 66 views
12

Tôi thà sử dụng một chuỗi, nhưng chúng ta không được coi là giáo viên ghét chúng và muốn chúng ta tìm ra cách để tránh chúng. Vì vậy, tôi nhìn vào sử dụng một cấu trúc, nhưng chúng tôi không phải là xa trong cuốn sách và cô ghét nó khi tôi bỏ qua phía trước. Vì vậy, tôi đã nghĩ đến việc này:C++ truyền mảng char đến hàm

#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" 
} 

Nhưng điều này không hiệu quả và tôi không biết tại sao.

+5

Tránh 'std :: chuỗi' là hết sức ngu ngốc trừ như một bài tập học tập (và có lẽ thậm chí sau đó). Nó là một phần của thư viện chuẩn, và nó được thiết kế để thay thế các con trỏ char thường và loại bỏ hầu hết các vấn đề liên quan đến chúng. Giáo viên của bạn có vẻ giống như một người nghiện rác, người muốn bạn viết mã C trong C++. – cHao

Trả lời

7

Một cách là để làm điều đó như thế này:

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

Bạn cũng sẽ cần phải thay đổi chính mình để:

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

Tuy nhiên, bạn phải cẩn thận không để tràn bộ đệm ban đầu của bạn.

Lý do mã ban đầu của bạn không hoạt động là do bạn không thể chỉ định chuỗi cho char con trỏ. Thay vào đó, bạn phải sao chép chuỗi thành char*.

+0

OP giải thích rằng anh ta không thể sử dụng chuỗi –

+1

Đã sửa lỗi, đã xóa câu cuối cùng. – Mysticial

1

Mảng được chuyển thành con trỏ khi được truyền dưới dạng tham số.
Vì vậy, cách đơn giản mà bạn muốn là:

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

Nếu bạn đang đi để khoe bạn có thể vượt qua mảng bằng cách tham khảo.
Nhưng nếu bạn không thể đọc trước, bạn sẽ không thể sử dụng điều này.

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; 
} 

để làm cho nó hữu ích hơn mặc dù bạn có thể template nó:

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

myname1 = "Billy" không sao chép một chuỗi nó sao chép một con trỏ vào bộ nhớ địa phương liên tục có chứa "Billy"

Đưa xem strncpy() hoặc memcpy()

0

Chuyển nó thành char * thay vì ký hiệu char &. Bạn đang chuyển một tham chiếu đến một ký tự đơn thay vì một con trỏ tới một mảng ký tự trong mã này.

Cũng sử dụng strncpy (google it) để đặt giá trị của tr char * khi bạn đang ở trong hàm.

0

void myfunc (char &); là vấn đề cần phải có trong một char * và không phải là một tham chiếu char đó là những gì bạn đã làm.

và trong chức năng sử dụng strcpy (điểm đến char *, nguồn char *);

4

dòng mã này là sai:

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

myfunc() không trả lại bất cứ điều gì, kiểu trả về của nó là void.

Hãy thử sử dụng:

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

Hoặc

myfunc(myname); 
cout<<"myname is " << myname; 
Các vấn đề liên quan