2014-12-01 42 views
-1

我正在從函數返回一個字符。當我在屏幕上看到這些奇怪的符號時,一切正常。C++ char返回輸出符號

#include <iostream> 

void testfunc(char* outStr); 

int main() 
{ 
    char FirstName[10]; 
    testfunc(FirstName); 
    std::cout << "So far so good."; 
    std::cout << std::endl; 
    std::cout << FirstName; 
    std::cout << std::endl; 
    std::cout << "It worked!"; 
    std::cout << std::endl; 
    system("pause"); 
    return 0; 
} 

void testfunc(char* outStr) 
{ 
    char FirstName[10]; 
    std::cin >> FirstName; 
    outStr = FirstName; 
} 

我有一個問題的圖片,但似乎我不能發表任何。輸出看起來像隨機數字和符號。這不是一個地址。它確實編譯並通過程序運行良好。 Cout在FirstName之前和之後,所有輸出都很好。然而,名字本身輸出符號和塊。

+1

'outStr = FirstName'只複製方向。使用'strcpy(outStr,FirstName)'。或者更好的是,使用'std :: string' – Noel 2014-12-01 19:51:13

+0

我不認爲這是這個特定問題的重複;有問題的一行是'outStr = FirstName',這似乎是試圖拷貝數組內容。 – cdhowie 2014-12-01 19:51:19

+1

1.函數返回後,'testfunc()中的'FirstName'數組無效。 2.'outStr = FirstName;'實際上沒有用,它不會改變'main()'中聲明的'char FirstName [10]'(提示,請嘗試'strncpy()'而不是'='! – 2014-12-01 19:53:06

回答

3

outStr = FirstName實際上不復制字符串,它只是分配outStr參數變量指向內testfunc()FirstName陣列的所述第一元件; main()中的FirstName數組未被修改。

要麼使用strcpy()來複制字符串,要麼使用std::string而不是字符數組。