Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按字符返回本地字符串文字*_C++_String_Pointers_Char_String Literals - Fatal编程技术网

C++ 按字符返回本地字符串文字*

C++ 按字符返回本地字符串文字*,c++,string,pointers,char,string-literals,C++,String,Pointers,Char,String Literals,我有一个模板函数,它将接收一个枚举数,并将其转换为C样式的以null结尾的字符串。我知道这个程序有一个逻辑错误,因为函数的局部变量通过引用作为返回值传回。但是,Visual Studio 17执行该程序时没有错误或警告。这是否会导致任何未定义的行为或内存泄漏?当str超出作用域时,是否会返回地址副本并销毁指针变量?这是一个好的编程实践吗 我能想到的另一个选择是创建动态内存。例如,const char*str=new char[size] 程序是正确的。字符串文字具有整个程序的生命周期,因此它保证

我有一个模板函数,它将接收一个枚举数,并将其转换为C样式的以null结尾的字符串。我知道这个程序有一个逻辑错误,因为函数的局部变量通过引用作为返回值传回。但是,Visual Studio 17执行该程序时没有错误或警告。这是否会导致任何未定义的行为或内存泄漏?当str超出作用域时,是否会返回地址副本并销毁指针变量?这是一个好的编程实践吗

我能想到的另一个选择是创建动态内存。例如,const char*str=new char[size]


程序是正确的。字符串文字具有整个程序的生命周期,因此它保证始终可用

然而,该程序是不必要的冗长

return str = "ERROR: unmatched grade";

return "ERROR: unmatched grade";

但是更干净。

程序是正确的。字符串文字具有整个程序的生命周期,因此它保证始终可用

然而,该程序是不必要的冗长

return str = "ERROR: unmatched grade";

return "ERROR: unmatched grade";

但是更干净。

这是安全的,因为字符串文字具有静态存储持续时间,这意味着它们在程序的整个生命周期内都存在

您可以简单地返回字符串文本

 return "D+"; 
即使您确实将其分配给了局部变量并返回了它,这里显示得更明确一些:

str = "D+";
return str;

在函数返回一个指向字符串的指针后,该字符串文本将安全存在。当str变量超出范围时,您将返回该str指针的副本,指针指向在应用程序整个生命周期内存在的字符串文字的开头。

这是安全的,因为字符串文字具有静态存储持续时间-这意味着它们在程序的生命周期内存在

您可以简单地返回字符串文本

 return "D+"; 
即使您确实将其分配给了局部变量并返回了它,这里显示得更明确一些:

str = "D+";
return str;

在函数返回一个指向字符串的指针后,该字符串文本将安全存在。当str变量超出范围时,您返回的是该str指针的副本,指针指向应用程序整个生命周期中存在的字符串文字的开头。

为什么要编写return str=foo;而不是返回foo;?考虑返回STD::String视图保存编译时间字符串长度信息。为什么要写返回STR=FO;而不是返回foo;?考虑返回STD::String视图保存编译时间字符串长度信息。谢谢解释!另一个问题,为什么它不适用于整数?我指的是返回局部整数变量的指针?其他文字(如整数文字、浮动文字)是否在整个程序中持续使用?还是只有字符串具有整个生命周期program@sangminpark所有文本都有一个程序的生命周期。但是你不能有一个指向浮点文本或整数文本的指针,所以我不确定你指的是什么。可能你需要问一个单独的问题,并提供一些代码示例。感谢您的解释!另一个问题,为什么它不适用于整数?我的意思是返回局部整数指针变量作为引用?其他文字(如整数文字、浮动文字)是否在整个程序中持续使用?还是只有字符串具有整个生命周期program@sangminpark所有文本都有一个程序的生命周期。但是你不能有一个指向浮点文本或整数文本的指针,所以我不确定你指的是什么。可能您需要问一个单独的问题,并提供一些代码示例。