2016-05-29 48 views
0

我希望你看看下面的兩個代碼,並告訴我爲什麼第一個工作,另一個不工作。爲什麼cout一個簡單的char *不工作?

第一個代碼(工作):

#include <iostream> 
#include <string.h> 

using namespace std; 

char* getCoordinates(char* AndroidID) 
{//Access the database and get the South Latitude value 
    //This is here is dummy data for testing 
    const char* S = "27.19122859"; 
    const char* N = "27.19245011"; 
    const char* W = "31.17657602"; 
    const char* E = "31.17657602"; 
    char X[100]=""; 
    strncat(X, "S", 1); 
    strncat(X, S, strlen(S)); 
    strncat(X, "N", 1); 
    strncat(X, N, strlen(N)); 
    strncat(X, "W", 1); 
    strncat(X, W, strlen(W)); 
    strncat(X, "E", 1); 
    strncat(X, E, strlen(E)); 
    char* Y = X; 
    cout<<Y; 
    return Y; 
} 
int main() 
{ 
    char* sda=NULL; 
    getCoordinates(sda); 
    return 0; 
} 

這正確打印出來我要撰寫

S27.19122859N27.19245011W31.17657602E31.17657602字符串

但是,當我嘗試做同樣的事情,但打印出main()中的返回值有點奇怪 第二個代碼(不工作)

#include <iostream> 
#include <string.h> 

using namespace std; 

char* getCoordinates(char* AndroidID) 
{//Access the database and get the South Latitude value 
    //This is here is dummy data for testing 
    const char* S = "27.19122859"; 
    const char* N = "27.19245011"; 
    const char* W = "31.17657602"; 
    const char* E = "31.17657602"; 
    char X[100]=""; 
    strncat(X, "S", 1); 
    strncat(X, S, strlen(S)); 
    strncat(X, "N", 1); 
    strncat(X, N, strlen(N)); 
    strncat(X, "W", 1); 
    strncat(X, W, strlen(W)); 
    strncat(X, "E", 1); 
    strncat(X, E, strlen(E)); 
    char* Y = X; 
    return Y; 
} 

int main() 
{ 
    char* sda=NULL; 
    char* T=getCoordinates(sda); 
    cout<<T; 
    return 0; 
} 

此輸出:

S27。 N27.19245011W31.`%@ \╞G░░)$ @ @)

這裏有什麼問題?

+0

爲什麼不使用'std :: string',這隻能在這裏工作? –

+0

[編譯器可以解決這個問題。](http://coliru.stacked-crooked.com/a/69795df051f4d148) – chris

+0

非常感謝你:) –

回答

1

您正在返回一個指向數組char的指針,該數組的壽命只與函數一樣長。當函數返回時,數組不再有效。

+0

謝謝:)我會嘗試做一個字符串然後轉換該字符串作爲另一個函數的輸入所需的char *。 –

+0

@SamerBastawy您總是可以使用'std :: string'中的'c_str()'。 –

1

它不工作,因爲你的函數getCoordinates返回指向緩衝區的指針,緩衝區具有局部範圍的函數getCoordinates並在函數返回後被銷燬。使用std :: string而不是char,它會起作用。

+0

謝謝。欣賞它 –

相關問題