C++在函数中如何能return一个数组型的字符串

我在代码中定义了一个函数

read(int fd){
char buff[8];

…………

read(fd,buff,8) //这个地方是从硬件读取8个字节,并存储在buff中

…………

①return buff;
}

主函数中想要调用这个完整的字符串
int main(){
char *str;

……………

②str = read(fd);

printf( str );

……………

}

请问这样printf出来的是完整的字符串么?
关于这个指针和首地址的问题不太清楚,麻烦大家详细解释一下!有追分噢

1. 按照你的写法, buff是在read()的函数栈中分配的, 当read()函数调用完毕后, 栈上的内容会被释放, 所以在main()调用read()后, 进行printf()获得的很有可能是无效的数据. 这种方法不可行.

2. 尽量通过扩展参数的方式把buff传递给read()函数, read()函数将结果写入buff并返回
int read(int fd, char *buff, int len){... return 1;}
int main()
{
char buff[8];
if(read(fd, buff, 8) != 0)
printf("%s\n", buff);
else
printf("error\n");
}

3. 或者如果read()参数不可扩展, 可以通过static 变量或者全局变量
c文件头部定义char buff[8]; // 或者 static char buff[8]; 减少全局变量
read()函数中删除char buff[8];的定义就可以了.
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-01
public char* read(int fd)
{
....................
return buff;
}

或者使用String 类型的字符串
public String read(int fd)
{
String buff;
read(fd,buff,8) ;
return buff;
}
main()
{
String str=read(fd);
.............
}追问

请问定义了char* read(int fd)
return buff;返回的是首地址么?

那主函数中如何调用这个字符型数组?*buff还是直接buff?

本回答被网友采纳
第2个回答  2013-05-01
定义函数的时候应该是 char* read(int fd){}
return &buff[0];
buff应该定义在全局吧。。局部变量在函数调用完就释放了。。
printf("%s",str);

如果没记错的话应该是这样的。。我自己也没试 不保证一定正确哦
第3个回答  2013-05-01
buff是char型 可以直接返回

C++自定义的函数怎么返回一个字符串 或者字符数组呢
有2中方法:一种是创建一个全局数组来保存,返回是返回这个数组,但是这个没有伸缩性还有一种方法就是在堆中申请内存就是用new操作符来分配一个数组,在返回回去,但是同时你要提供一个释放函数来释放这个动态数组

c++如何返回一个数组
\/\/ 方法1,用静态变量进行返回 char *SubFunction(void){ static char szText[5] = "adfa"; \/\/ 用静态空间 \/\/对p进行赋值操作 return szText;} void Caller() \/\/ 这个函数调用SubFunction { TRACE("%s\\n", SubFunction);} \/\/ 方法2,用指针传递 void SubFunction(char *pText1, char *p...

C++怎么在函数中返回数组
{ int *a=new int[n];for (int i=0;i<n;i++) a[i]=i;return a;}

C++中如何使函数返回数组
返回一个指向数组的指针 include<iostream using namespace std;int* Array(){int *a;a=new int [10];for(int i=0;i<10;i++){a[i]=i+1;cout<<a[i]<<"";} cout<<endl;return a;}void main(){int *b;b=Array();for(int i=0;i<10;i++)cout<<b[i]<<"";cout<<endl;...

C语言中,return语句怎么样返回一个数组?
首先,C\/C++只能返回数组的指针而不能返回整个数组。即使返回数组的指针,但如果函数中的数组是自动性质,那将是危险的。这是比较正宗的表述。如果确实需要从函数中返回自动性质的数组的全部元素值,有没有办法呢?有。由于C\/C++是允许返回结构体的,可以定义一个结构体模板,把数组作为成员安排在其中,...

在C中如何使函数返回数组
在C\/C++中,一般有两种方法来返回一个数组。第一种方法:返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组例子如下:#include <stdio.h include <stdlib.h int (*retArray())[10]{int (*a)[10];int i=0;\/*动态开辟空间...

c++被调用函数中return语句
被调函数可以是无返回型,则不需要返回值,不需return语句,被调函数可以出现对个return语句,但是只可执行一个一个return语句只可以返回一个值。可以用malloc指令申请开辟动态内存空间的方式,返回一个数组。若想返回多个值,最简单的办法可以用全局变量传递参数 ...

用C++编程一个函数实现一个字符串是否包含另一个字符串?
首先为字符串b腾出空位 int len=strlen(b);for(int i=0;i<len;i++){ (a+10+len+i) = *(a+10+i);} 然后将b插入到腾出来的空位即可 for(int j=0;j<len;j++){ (a+10+j) = b[j];} 这个是最原理的东西,如果你能理解这个,那么后两个for循环其实可以合并为一个,全部代码为 ...

在C++中,为什么函数不可以返回数组类型的返回值。还有为什么在C++中...
1, 2, 3, 4, 5, 6, 7, 19, 54, 32 };return tt;} int main(){ struct Test t = returnArray();for ( int i = 0; i < 10; ++i ){ printf( "%d\\t", t.buf[ i ] );} } C++当然跟C一样。你说C++中允许在字符串上进行整体操作,那个string是一个类,不是数组。

c++中如何让函数返回一个存有数据的向量
例如,语句:vector<int> intList---将intList声明为一个元素类型为int的向量容器对象。类似地,语句:vector<string> stringList---将stringList声明为一个元素类型为string的向量容器对象。声明向量对象: vector类包含了多个构造函数,其中包括默认构造函数。因此,可以通过多种方式来 明和初始化向量容器...

相似回答