子函数内部字符串外部返回,怎样编程?
#include <stdio.h>#include <conio.h>
char ch showch2(void)
{
char chm = " ";
chm = 'H', chm = 'T', chm = 'Y';
return chm; //return {'Y', 'T', 'H', '\0'};
}
int main(void)
{
printf("%s\n", showch2());
return 0;
}
该代码无法编译,求各位大神指点,如何修改;这里拜谢啦。。。 char* showch2(void)
{
char chm = " ";
chm = 'H', chm = 'T', chm = 'Y';
return chm; //return {'Y', 'T', 'H', '\0'};
} yuxijian2020 发表于 2021-4-27 16:43
这是搞笑的吗?有经过实测?? wp231957 发表于 2021-4-27 16:47
这是搞笑的吗?有经过实测??
emmm 我没看内部实现,就看到返回值就给他改了 yuxijian2020 发表于 2021-4-27 16:49
emmm 我没看内部实现,就看到返回值就给他改了
函数内部地址是无法传到外部的 本帖最后由 yuxijian2020 于 2021-4-27 16:54 编辑
稍微改一下,emmmm
char* ReturnString()
{
int size = 4;
char* a = (char*)malloc(size * sizeof(char));
if (!a)
return NULL;
a = '1';
a = '2';
a = '3';
a = '\0';
return a;
}
int main()
{
char* result = ReturnString();
printf_s("%s", result);
free(result);
return 0;
} wp231957 发表于 2021-4-27 16:51
函数内部地址是无法传到外部的
申请个空间就OK了,稍微改一下吧...{:10_269:} yuxijian2020 发表于 2021-4-27 16:53
申请个空间就OK了,稍微改一下吧...
可有实测,贴个图
理论上,这个空间也是传不出来的 wp231957 发表于 2021-4-27 16:57
可有实测,贴个图
理论上,这个空间也是传不出来的
wp231957 发表于 2021-4-27 16:57
可有实测,贴个图
理论上,这个空间也是传不出来的
用全局变量,不返回 wp231957 发表于 2021-4-27 16:57
可有实测,贴个图
理论上,这个空间也是传不出来的
a 只是保存了 4个字节空间 的首地址
这个地址被申请出来后,没有被释放
它只要告诉外面的指针这个首地址在哪外面就可以访问这个地址了 yuxijian2020 发表于 2021-4-27 16:43
这个程序是错误的,你不应该返回局部变量的地址
要加一个 static 才正确
char* showch2(void)
{
static char chm = " ";
chm = 'H', chm = 'T', chm = 'Y';
return chm; //return {'Y', 'T', 'H', '\0'};
} 人造人 发表于 2021-4-27 17:20
这个程序是错误的,你不应该返回局部变量的地址
要加一个 static 才正确
咋我都说明白了啊
a 是个临时变量,但是它指向了一个已经申请过空间的地址
指向的空间没有释放,a 是个变量但是空间一直存在
此时就像 返回普通变量一样
a 把自己指向的空间的首地址传到外面,外面的变量就可以访问这块空间了
只是要注意释放空间 const int size = 4;
char(*ReturnPointerToArray(void)){
char chm = "YTH";
return &chm;
}
参考C++Primer liaoziying1998 发表于 2021-4-27 18:17
参考C++Primer
$ cat main.cpp
#include <iostream>
const int size = 4;
char(*ReturnPointerToArray(void)){
char chm = "YTH";
return &chm;
}
int main() {
std::cout << *ReturnPointerToArray() << std::endl;
return 0;
}
$ g++ -g -Wall -o main main.cpp
main.cpp: In function ‘char (* ReturnPointerToArray())’:
main.cpp:7:12: warning: address of local variable ‘chm’ returned [-Wreturn-local-addr]
7 | return &chm;
| ^~~~
main.cpp:6:10: note: declared here
6 | char chm = "YTH";
| ^~~
$ ./main
$ vim main.cpp
$ cat main.cpp
#include <iostream>
const int size = 4;
char(*ReturnPointerToArray(void)){
static char chm = "YTH";
return &chm;
}
int main() {
std::cout << *ReturnPointerToArray() << std::endl;
return 0;
}
$ g++ -g -Wall -o main main.cpp
$ ./main
YTH
$
#include<iostream>
using std::cout;
const int size = 4;
char(*ReturnPointerToArray()){
static char chm = "YTH";
return &chm;
}
int main()
{
char(*chm) = ReturnPointerToArray();
cout << *chm;
return 0;
}
ReturnPointerToArray()返回的是一个指针,指向一个含有4个元素的char数组
注:1、最好定义常量size,使三个位置的数值一致
2、定义成static变量才能保存"YTH",否则ReturnPointerToArray()执行完后内存释放,cout输出的是乱码 #include<iostream>
using std::cout;
#include<string>
using std::string;
string ReturnString() {
string s = "YTH";
return s;
}
int main() {
cout << ReturnString;
return 0;
}
我能想到的极致了 liaoziying1998 发表于 2021-4-27 18:59
我能想到的极致了
#include<iostream>
using std::cout;
#include<string>
using std::string;
string ReturnString() {
string s = "YTH";
return s;
}
int main() {
string s = ReturnString();
cout << s;
return 0;
} 多谢各位大神、老大,指点、指教;very good。。。Tank you much。。。
页:
[1]