为什么cout一个简单的char *不起作用?

时间:2016-05-29 05:52:13

标签: c++ string pointers char cout

我希望您查看以下两个代码并告诉我为什么第一个代码有效而另一个代码无效。

第一个代码(工作):

map

这会正确打印出我想要撰写的字符串

  

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;
    cout<<Y;
    return Y;
}
int main()
{
    char* sda=NULL;
    getCoordinates(sda);
    return 0;
}

输出:

  

S27。 N27.19245011W31。%@ \╞G░■)$â€@■)

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

您正在返回一个指向method="get"数组的指针,该数组的生命周期与函数一样长。当函数返回时,数组不再有效。

答案 1 :(得分:1)

它不起作用,因为你的函数getCoordinates返回指向缓冲区的指针,缓冲区具有函数getCoordinates的本地范围,并在函数返回后被销毁。使用std :: string而不是char,它将起作用。