如何在C中返回指向数组的指针?
我正在编写一个函数,它读取一个文件并将文本字符逐个插入数组,然后返回指向该数组的指针。文件允许的最大大小不支持为2KB 以下是我现在拥有的:如何在C中返回指向数组的指针?,c,arrays,pointers,C,Arrays,Pointers,我正在编写一个函数,它读取一个文件并将文本字符逐个插入数组,然后返回指向该数组的指针。文件允许的最大大小不支持为2KB 以下是我现在拥有的: int main(){ char data[2048]; char* data4=layer4(data); } char* layer4(char array[]){ FILE *fp; fp=fopen("sendfile.txt","r+"); fscanf(fp, "%c", array); for
int main(){
char data[2048];
char* data4=layer4(data);
}
char* layer4(char array[]){
FILE *fp;
fp=fopen("sendfile.txt","r+");
fscanf(fp, "%c", array);
for(int i=0; i<2048; i++){
printf("%c\n",array[i]);
}
return &array;
}
intmain(){
字符数据[2048];
char*data4=第4层(数据);
}
char*layer4(char数组[]){
文件*fp;
fp=fopen(“sendfile.txt”、“r+”);
fscanf(fp,“%c”,数组);
对于(int i=0;i您只需要返回:
return array;
返回指向该数组的指针
不,你不必那么做
您可以将原型编写为voidlayer4(chararray[])
并直接修改数组
-在层4
中对数组
所做的更改将在该函数退出后保留。数组
已经指向字符
。因此您只需返回数组
,而不必返回&array
请参阅本文。数组已经是一个指针。所以只需执行以下操作:返回数组;
多个问题。一些问题由
char*layer4(char数组[]){
文件*fp;
fp=fopen(“sendfile.txt”、“r+”);
//检查打开是否成功
如果(fp==NULL)返回NULL;
//不清楚为什么代码只能读取1个字符
//fscanf(fp,“%c”,数组);
//嫌疑犯想要什么
尺寸i;
对于(i=0;i您的方法应该将数组作为数组或指针,因为它是指针,那么您可以将它作为自身返回
为什么?你想通过返回来实现什么?数组将在其他函数调用中使用。@Freedor05:你不必返回数组,main知道它,它已经被修改过了。@Freedor05,不要相信下面的答案。它们不会帮助你,因为你遇到的问题不是返回什么,而是首先要返回什么读入某些内容。为什么只从文件中读取1个字符,然后从数组中打印2048个字符?除第一个字符外,所有字符都未初始化。但请注意,它不是指向数组的指针,而是指向char
。区别很重要。奇怪的是,这个错误的答案会得到3'+'或'ups'。OP没有循环r读取该文件时,scanf将始终读取数组的第一个元素。正如Sourav Gosh指出的,由于参数的指针与返回值相同,所以无论如何都没有返回任何内容。@Jay Kumar Rstrcpy()
和许多标准函数返回相同的指针。函数是否返回值不是OP的中心问题。@恰克斯,没错。为什么你要谈论返回值,而代码从文件中读取的字符数不超过1个?为什么每个人都回答返回值,而中心问题是其他问题?@Jay Kumar R我提到过返回值作为对返回值的注释。听起来我们同意关键问题不是返回值。
char* layer4(char array[]){
FILE *fp;
fp=fopen("sendfile.txt","r+");
// check if open succeeded
if (fp == NULL) return NULL;
// Unclear why codes read only 1 char
// fscanf(fp, "%c", array);
// Suspect OP wants
size_t i;
for(i=0; i<2048; i++){
if (fscanf(fp, "%c", &array[i]) != 1) break;
}
// Could have use fread()
// More canonical to use type `size_t` than `int` to index arrays.
// for(int i=0; i<2048; i++){
for(size_t j=0; j<i; j++){
printf("%c\n",array[j]);
}
// do not forget to put your toys away
fclose(fp);
// Simply return `array`
// return &array;
return array;
}
char* layer4(char array[])
{
..
return array;
}