2015-09-02 26 views
0

我有這些它寫在C++函數:如何解決C++ char轉換?

#include ... 

char read_somthing() 
{ 
    int n = 0, spot = 0; 
    char buf = '\0'; 

    char response[13]; 
    memset(response, '\0', sizeof response); 

    do { 
     n = read(fd, &buf, 1); 
     sprintf(&response[spot], "%c", buf); 
     spot += n; 
    } while(buf != '\r' && n > 0); 
    cout << "Response: " << response << endl; 
    return buf; 
} 

void main() 
{ 
    cout << read_somthing(); 
    char response = read_somthing(); 
    cout << response; 
} 

的問題是,首先COUT作品和打印的真正價值,但第二個將返回空行,我認爲這是與第二在主要功能線,我如何解決它?

PS:我註釋掉了cout << read_somthing();,但輸出中沒有任何內容。

+1

顯示read_somthing()正在做什麼。它如何填充「響應」? – trojanfoe

+0

用你提供的東西看起來不錯......也許<<你的cout結束時的endl可能會使它更具可讀性?或者也許你的read_something壞了?如果你只是從read_something返回'*',它是否工作? – mark

+0

你知道你正在從你的'read_something()'函數返回一個字符而不是一些字符串嗎? –

回答

0

您的read_somthing正在讀取輸入中的字符並返回該字符的副本。第二次調用read_somthing時,輸入流已被移至1個字符之前,如果輸入爲1個字符,則讀取另一個將不會產生結果。

+0

是的,我懷疑,評論出第一個沒有幫助,仍然是空的輸出。 – chosipa

+0

另外還有一個內存泄漏,因爲沒有人刪除返回緩衝區。順便說一句:'read_something'的返回值不同。 –

0

這與初始化和分配類似。 在c它是允許的,但在c + +它會給出不同的結果

第一個依靠初始化,而第二個 - 分配。在C++中,這些操作是可加載的,因此可能會導致不同的結果。

0

您正在返回buf變量,它是單個字符。當do {} while()環路退出時,有機會buf包含\r(或read失敗時的垃圾),這將不會顯示在控制檯輸出上。

您可能想要返回response中收集的數據。爲了緩解數據分配等問題,只需使用std::string - 更改返回類型read_something並將最後一行改爲return response;