相关疑难解决方法(0)

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

而代码只是运行而没有运行时异常!

输出是 58

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

为什么在返回字符串的函数上调用c_str()不起作用?

我有一个返回字符串的函数.但是,当我调用它并对其执行c_str()以将其转换为const char*时,它仅在我首先将其存储到另一个字符串时才起作用.如果我直接从函数中调用c_str(),它会将垃圾值存储在const char*中.

为什么会这样?感觉我在这里遗漏了一些非常基本的东西......

string str = SomeFunction();
const char* strConverted = str.c_str(); // strConverted stores the value of the string properly
const char* charArray= SomeFunction().c_str(); // charArray stores garbage value

static string SomeFunction()
{
    string str;
    // does some string stuff
    return str;
}
Run Code Online (Sandbox Code Playgroud)

c++ string

15
推荐指数
1
解决办法
5247
查看次数

为什么c_str()为两个不同的字符串返回相同的值?

给定一个简单的文件加载功能,

std::string load_file(const std::string &filename) {
    std::ifstream     file(filename);
    std::string       line;
    std::stringstream stream;
    while (std::getline(file, line)) {
        stream << line << "\n";
    }
    return stream.str();
}
Run Code Online (Sandbox Code Playgroud)

为什么以下打印another_file两次内容?

const char *some_file = load_file("some_file").c_str();
const char *another_file = load_file("another_file").c_str();
printf("%s", some_file);
printf("%s", another_file);
Run Code Online (Sandbox Code Playgroud)

c++ string

4
推荐指数
1
解决办法
495
查看次数

c_str使用不当

我有一个定义如下的方法:

const std::string returnStringMethod()
{
    std::string myString;

    // populate myString

    return myString;
}
Run Code Online (Sandbox Code Playgroud)

现在,在调用者中,我做了类似这样的事情:

const char * ptr = returnStringMethod().c_str(); 
Run Code Online (Sandbox Code Playgroud)

正如我所看到的,这是返回一些我没想到的截断字符串.但是,以下工作正常:

std::string str = returnStringMethod();
const char * ptr = str.c_str();
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解这里发生的事情吗?.

PS:我们每周构建一次代码.我上周提交代码时测试了这个,事情还不错.所以,我真的想知道我在这里可能缺少什么.

谢谢,帕万.

c++ pointers memory-management stdstring

3
推荐指数
1
解决办法
240
查看次数

是否会出现问题stringstream.str().c_str()?

代码:

stringstream ss("012345678901234567890123456789012345678901234567890123456789");  
Run Code Online (Sandbox Code Playgroud)

一些文章说由于ss.str返回临时对象而导致后续使用是错误的,并且在调用之前会被破坏.c_str();

 const char* cstr2 = ss.str().c_str();  
Run Code Online (Sandbox Code Playgroud)

但我运行的例子,没有问题?如何理解?

c++ stringstream

1
推荐指数
3
解决办法
1万
查看次数

使用string的c_str()函数的C++奇怪行为

我正在将我的项目从Visual Studio 06移动到2010.在这样做时,我在我的代码中观察到了这种行为.我有一个Get字符串函数,如下所示:

string GetTheStr() 
{ 
        return strSomeStdString; 
} 
Run Code Online (Sandbox Code Playgroud)

然后有另一个函数调用上面的get函数,如下所示:

const char* ptrStr = (char *)GetTheStr().c_str();
Run Code Online (Sandbox Code Playgroud)

ptrStr指向的字符串的值是""

上面的代码在visual studio 06中运行良好,但在visual studio 2010上却没有.

然后我尝试了几个实验:

std::string str = GetTheStr(); // -> value inside str displayed correctly
const char* PtrCStr = str.c_str(); // -> value pointed by PtrCStr displayed correctly
const char* PtrData = str.data(); // -> value pointed by PtrData displayed correctly
const char* ptr = (char *)GetTheStr().c_str(); // -> value pointed by ptr NOT displayed correctly
Run Code Online (Sandbox Code Playgroud)

我想知道为什么最后一行不起作用.任何人都可以告诉我为什么上面的行为发生在Visual Studio 2010而不是视觉工作室06?

提前致谢 :)

c++ stdstring

1
推荐指数
2
解决办法
926
查看次数