【发布时间】:2015-11-28 03:52:41
【问题描述】:
我编写了一个函数,它接受一个字符串并返回一个 const char *,其中包含该字符串的编码版本。我调用这个函数,然后创建一个新字符串。这样做时,我不知何故无意中更改了指向我的 const char * 的值,我认为这是不可能的。
但是,当我不使用自己的函数,而只是将一个值硬编码到我的 const char 数组中时,创建字符串时该值不会改变。为什么这里有区别,为什么我仍然可以更改 const char 数组的值?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <iostream>
using namespace std;
// returns "@username@FIN"
const char* encodeUsername(string username)
{
username = "@" + username + "@FIN";
return username.c_str();
}
int main(void)
{
string jack("jack");
const char* encodedUsername = "@jack@FIN";
string dummy("hi");
printf("%s\n", encodedUsername); //outputs "@jack@FIN", as expected.
string tim("tim");
const char* encodedUsername2 = encodeUsername(tim);
string dummy2("hi");
printf("%s\n", encodedUsername2); //outputs "hi". Why?
}
【问题讨论】:
标签: c++ string memory-management