2016-04-14 56 views
0

我想要一種具有固定最大長度的cstring,讓我們說5個。如果可能的話,我也想使用標準的cstring函數。 但是,由於這個,我得到了很多功能參數的問題。我不是很熟悉typedef,但我不知道這是錯誤的方法還是我可能只是錯過了一些東西。 C++(MinGW的-W64)字符數組的typedef和在函數中的使用

typedef char Name[5]; 
std::ostream& operator<<(std::ostream& os, Name& car) 
{ 
    os << car; 
    return os; 
} 

void Change(Name str) 
{ 
    str[2] = '0'; 
} 
Name ChangeRtn(Name str) 
{ 
    str[2] = '1'; 
    return str; 
} 
void ChangeCat(Name * strp) 
{ 
    strcat(strp,"3"); 
} 
int main() 
{ 
    Name test = "abcd"; 
    Change(test); 
    std::cout << test << std::endl; 

    Name test2 = ChangeRtn(test); 
    std::cout << test2 << std::endl; 

    Name * test3; 
    //*test3 = "12"; //incompatible types... make a operator= func 
    strcpy (*test3,"12"); //a temp replacement of operater=? 
    ChangeCat(test3); 
    std::cout << test3 << std::endl; 

    return 0; 
} 

返回錯誤......

typedef.cpp:15:24: error: 'ChangeRtn' declared as function returning an array 
Name ChangeRtn(Name str) 
         ^
typedef.cpp: In function 'void ChangeCat(char (*)[5])': 
typedef.cpp:22:17: error: cannot convert 'char (*)[5]' to 'char*' for argument '1' to 'char* strcat(char*, const char*)' 
    strcat(strp,"3"); 
       ^
typedef.cpp: In function 'int main()': 
typedef.cpp:30:29: error: 'ChangeRtn' was not declared in this scope 
    Name test2 = ChangeRtn(test); 
          ^
+0

由於'Change'修改它給數組,爲什麼它需要返回什麼? – Barmar

+1

對於固定大小的,可以在C++中使用'std :: array'。 'std :: string'也很方便。 – iammilind

回答

1

首先,你需要選擇你的語言。 C或C++。

接下來......是的,你不能從函數返回數組。你可以這樣做的解決方法:

struct ArrReturn { char arr [5]; };

然後可以返回此類型。不要問我爲什麼那麼直接排列數組。

我是從C++的角度回答,沒有C.