Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1

    Copy return value sang một biến khác.

    Mình đang làm bài tập C++, đã viết xong 1 hàm nhận và return giá trị kiểu char. Nếu dùng cout << hàm; thì có thể in trực tiếp return value ra, nhưng mình muốn copy cái return value đó sang một biến char khác (nằm ngoài hàm) thì làm thế nào? Mình thử strcpy(biến,hàm) thì toàn bị treo lúc compile thôi.

  2. #2
    Bạn đưa code lên đi

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    /*struct Listing{    bool loadFileData(FILE* fp);    const char* given() const;    const char* surname() const;    const char* address() const;    const char* telephone() const;};struct TDirectory{    bool loadFileData(const char* filename);    void display() const;       void close();};*/#include <iostream>using namespace std;#include "TDirectory.h"#include <fstream>Listing::Listing(){    givenname=NULL;    surnam=NULL;    add=NULL;    phone=NULL;}Listing::~Listing(){    delete[]givenname;    delete[]surnam;    delete[]add;    delete[]phone;}bool TDirectory::loadFileData(const char* fname)//check the delimiter{    Listing p;    char read;    int count=0;    char buff[65];    bool flag=0;    FILE* pointer;    pointer=fopen(fname,"r");    if(pointer!=0)    {        //Check the delimitor of every field;        //while(!EOF)//Read the whole file        //{        mark1:for(int i=0;i<65;i++)            {                read=getc(pointer);                buff[i]=read;                if(((buff[i]=='
    '&&i<64) && buff[i]!=EOF)/*||(read==EOF && i<63)*/)//To check the last letter is delimitor or not, also check the letter number of the last set                {                    count++;                    //cout <<"TIMES: "<<count<<endl;                    goto mark1;                }                else if(read==EOF && i<64)                {                    flag=1;                }            }            if(read==EOF&&flag==1)             {                rewind(pointer);                if(p.loadFileData(pointer)==1) return 1;                      else return 0;            }    }    //fclose(pfile); }bool Listing::loadFileData(FILE *fp){        TDirectory pointer[100];    bool flag=0;    int count=0; temp=0;    mark1:switch(count)    {    case 0:        cout<<"CASE 1"<<endl;        givenname=new char[16];        for(int i=0;i<16;i++) {givenname[i]=getc(fp);            if((givenname[i]=='|' || givenname[i]=='
    ' || givenname[i]==EOF)&&i<16) {givenname[i]=NULL; strcpy(pointer[temp].outadd,given()); count++; goto mark1;}}//COPY return value sang outadd - errror.        break;    case 1:        cout<<"CASE 2"<<endl;        surnam=new char[16];        for(int i=0;i<16;i++) {surnam[i]=getc(fp);        if((surnam[i]=='|' || surnam[i]=='
    ' || surnam[i]==EOF)&&i<16) {surnam[i]=NULL;surname(); count++; goto mark1;}}        break;    case 2:        cout<<"CASE 3"<<endl;        add=new char[16];        for(int i=0;i<16;i++) {add[i]=getc(fp);        if((add[i]=='|' || add[i]=='
    ' || add[i]==EOF)&&i<16) {add[i]=NULL; address(); count++; goto mark1;}}        break;    case 3:        cout<<"CASE 4"<<endl;        phone=new char[16];        for(int i=0;i<16;i++) {phone[i]=getc(fp);        if(phone[i]=='
    ' && phone[i]!=EOF &&i<16 && count<4) {phone[i]=NULL; telephone(); count=0; goto mark1;}//Success but not last yet        else if(phone[i]!=EOF && i>=16) {count=4; i=-1; flag=0; goto mark2;}//Failed        else if(phone[i]==EOF &&i<16) {phone[i]=NULL; telephone(); count++; flag=1; goto mark2;}}//Success to the last set        break;    }    mark2:if(flag==1) {return 1; fclose(fp);}    else if(count==4&&flag!=1) {return 0; goto mark1;}    //return 0;     }const char* Listing::given() const{    char* name=new char[strlen(givenname)+1];    strcpy(name,givenname);    //cout<<"Succeed GIV  :"<<name<<endl;    return name;//GIÁ TRỊ TRẢ VỀ}const char* Listing::surname() const{    char* sur=new char[strlen(surnam)+1];    strcpy(sur,surnam);    //cout<<"Succeed SUR :"<<sur<<endl;    return sur;}const char* Listing::address() const{    char* address=new char[strlen(add)+1];    strcpy(address,add);    //cout<<"Succeed ADD :"<<address<<endl;    return address;}const char* Listing::telephone() const{    char* Tphone=new char[strlen(phone)+1];    strcpy(Tphone,phone);    //cout<<"Succeed PHONE :"<<Tphone<<endl;    return Tphone;}void TDirectory::display() const{    Listing a[10];    //strcpy(outname,a[1].given());    //strcpy(outsur,a[1].surname());    //strcpy(outadd,a[1].address());    //strcpy(outphone,a[1].telephone());    cout <<a[1].given()<<endl;}
    Code mình đang để nháp nên hơi nhiều comment để tiện theo dõi hoạt động của CT, hơi rối mắt xíu.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã nguồn PHP:
    char *test(char *s) { char *ptr = new char[strlen(s)+1]; strcpy(ptr, s); return ptr; } int main() { char s[4]; strcpy(s, test("abc")); cout << s; }  
    chạy vẫn tốt mà bạn.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •