当前位置:首页 » 编程语言 » c语言返回值是字符串

c语言返回值是字符串

发布时间: 2022-03-31 08:45:01

c语言怎么返回字符串数组

C语言返回值不支持返回数组,不过可以通过返回指针类型,用以替代数组。在C语言中,数组大多数时候是可以用指针替代的。

不过需要注意的是,不能够返回在函数内部定义的局部变量数组,因为一旦函数退出,局部变量就会被释放,导致数组指针无效。
可以返回以下几种:
1 全局变量,或者全局变量空间内的一个地址。
2 静态局部变量,或者静态局部变量内部的一个地址。
3 从参数传入的数组/指针变量,或者在其上做的合法偏移。
4 在数组内部动态申请的空间首地址。

② C语言系列之C语言如何返回字符串数组

C语言实现返回一个字符串数组,是没有这种功能的,但是可以用指向数组的指针来实现:

解释:

char **p 这个p就是指向数组的指针,它指向一个数组的起始地址.
想要引用里面的数组时,直接使用p[i] 即可。

我们知道C语言里面的各种数组,本质上都是指针,并且函数其实也是不能把数组当作参数的,实际上都是把数组的地址传进去了,实际上就是指向数组地址的指针。

实现

这样返回的P就是指向数组的指针了,实际上就是一个字符串数组

函数解释:

函数返回一个字符串数组,实际上就是指向数组的指针,传进去的是返回的数组的大小以及一个字符串数组,用来处理数据用。

③ 在C语言中,返回一个字符串的函数应该怎样定义

要返回字符串 需要返回char*类型

需要注意的是 返回的字符串 不能是该函数的局部变量,否则会导致出错

可以是参数字符串,全局变量,静态局部变量,或者动态分配的内存

比如

char*my_str_cpy(char*d,char*s)
{
char*p=d;
while(*p++=*s++);
returnd;//返回参数字符串。
}

④ C语言怎么设定函数返回值为char*字符串类型

给你写了个例子,fun函数用于为字符串开辟空间,然后返回字符串的指针
#include
#include
char
*
fun(int
n)
{
return
(char
*)malloc(n);
}
void
main()
{
char
*ray;
int
i;
ray
=
fun(5);
for
(i
=
0;
i
<
4;
++i)
{
ray[i]
=
65+i;
}
ray[4]...

⑤ C语言怎么设定函数返回值为char*字符串类型

把函数的返回值的类型设置为char类型的指针就可以了。
例如:char* MultMatrix( )
实例:
#include <iostream>
using namespace std;
char* MultMatrix( )
{
char*M = new char[4];
M[0]='a';
M[1]='b';
M[1]='c';
M[3]='d';
M[3]='\0';//给字符串写结尾
cout << M[0] << " " << M[1] << endl;//输出返回前的数组
cout << M[2] << " " << M[3] << endl;
return M;
}
int main()
{

char *M = MultMatrix();
cout << M[0] << " " << M[1] << endl;//输出返回后数组
cout << M[2] << " " << M[3] << endl;
delete[] M;
return 0;
}
运行结果:
a b
c d
a b
c d

⑥ c语言中return可以是一个字符串吗

当然可以
char* fun()
{
char* myname = "hello world";
return myname;
},函数的返回值类型可以有很多种!(int,float,bool,char*,char...)

⑦ C语言中以字符串为返回值的函数的问题,困扰我好几天了

野指针的含义:超出生命周期的指针,包括函数内局部数据的指针(static修饰数据除外,它不在栈上)和已经被释放了的动态分配内存区。
char *Getstr(void)

{
char s[80];
scanf("%s",s);
printf("s = %p\n",s);
return s;
}
这个函数,是将栈内局部变量的地址返回给调用者,调用者拿到的指针属于典型的超出生命周期的指针,对它的使用会不会引起错误,依赖于进一步的操作,本身行为就是不可预期的。
可以认为:使用strcpy和printf并没有破坏这个内存区域,即没有对这部分内存做修改,因此运行可以得到你期待的结果。但puts的运行修改了这部分内存区,导致你看到的都是乱码。

避免野指针带来的不确定性:
你可以使用
char *Getstr(void)
{
static char s[80];
scanf("%s",s);
printf("s = %p\n",s);
return s;
}
用这个函数,你的所有逻辑都不变。
或者
char *Getstr(void)
{
char *s = malloc(80);
scanf("%s",s);
printf("s = %p\n",s);
return s;
}
要记得在这个调用后得到的ptr,一定要用free(ptr)。

⑧ C语言如何返回字符串

new 是动态分配(在堆上分配),你向系统要了 50 B 的内存,如
char* str=new char[50]; // 50 * 1B
堆上分配就是这情况,你不释放(delete一下),它就认为你在用着;不会再给别人用
如果给你的你不用了,或是你把它给忘记了,那就算是内存泄露了、

当然,你程序退出的时候,系统会替你回收、不过这样的习惯不好,你想,如果你写了死循环(操作系统、服务器程序等)、那里面不断滴在内存泄露,你就危险了、后来发现,不知不觉,内存怎么就不够用了,明明自己用的不多啊、、

修改一下:
char* fanhui()
{
static char str[100]; // 局部变量,静态局部变量,它在第一次调用的时候分配,
cin >> str; // 函数返回了,str的空间还是存在的,也就是不会重复申请、
return str; // 而且,函数外面通过,指针也是可以访问他们的、、
}


char* fanhui()
{
char str[100]; // 局部变量,默认动态局部变量,它在每一次调用的时候分配,
cin >> str; // 函数返回了,str的空间也就不存在了,他是在,栈,上分配的、
return str; // 函数外面通过,指针想访问?、非法!!!人都不在了,你喊他干嘛啊??
}

⑨ C语言中函数如何返回字符串

别听 楼上 的 瞎说, 也 别 网络 了, 都是 错 的, 我 告诉 你 正确 答案

函数 中 的 字符 串 在 函数 结束 的 时候 会 自动 被 释放 掉, 所以 即使 返回 char* 指向 的
也 就是 原 函数 字符串 的 地址, 访问 的 是 一个 系统 没有 分配 给 程序 的 内存, 虽然 编译器 不会 报错, 但 语法 绝对 是 错误 的,而且 你 不一定 能 得到 一个 正确 的 结果
三种 解决 方法:
1, struct ret { char a[100]; }; 返回 一个 结构, 结构里面 包含 字符串
2, char* ret = (char *)malloc(100 * sizeof (char)); 在 函数 里 开 一个 动态 的 字符串, 这个 可以 返回, 不过 动态 内存 需要 手动 free 掉
3, 这个 不是 c语言 了, 调用 c++ 里面 的 string 类型, 也是 最简单 的 办法, 省心, 安全

⑩ c语言中函数返回值可以是数组、字符串和结构体吗

1、ANSIC语言标准,明确规定数组类型和函数类型不可以做为返回值。
解决这种返回值的方法是通过指针来间接返回,即使用数组指针和函数指针。这可以做为c语言引入指针的另一个理由。
2、字符串是数组的一种,是字符数组,所以同样不可以作为返回值。
3、结构体类型可以做为返回值,C语言设计者当时引入struct结构体的概念,目的是为了增加一种建立C语言新类型的机制,换句话说它希望通过struct建立的类型,像内置的int float类型一样使用方便。

热点内容
大型存储柜 发布:2025-01-17 06:08:27 浏览:644
发生脚本错误怎么办 发布:2025-01-17 06:03:02 浏览:793
删除文件夹时显示在另一程序打开 发布:2025-01-17 06:03:01 浏览:543
安卓手机怎么装驱动 发布:2025-01-17 06:02:17 浏览:622
安卓微信拍了拍怎么改 发布:2025-01-17 05:57:31 浏览:46
BMF服务器的系统服务怎么关 发布:2025-01-17 05:50:29 浏览:876
免刷安卓系统怎么进入usb调试 发布:2025-01-17 05:48:21 浏览:837
数据库的三层架构 发布:2025-01-17 05:17:36 浏览:149
云顶之弈有人开脚本怎么举报 发布:2025-01-17 05:16:59 浏览:682
sql包含数字 发布:2025-01-17 05:11:56 浏览:292