C 我可以返回数组而不是指针,如果不能,我可以使用指针吗?

ExagonX

我正在创建这个函数,它从一个更大的字符串中提取一个单词或字符串的一部分,它工作得很好,但我必须使用 strcpy 将它从指针转换为数组,是否可以返回一个数组?

如果不可能,我可以直接使用指针吗?我的意思是,使用指针而不是数组会导致标题 <string.h> 函数出现问题?或者我可以毫无问题地使用 alla 功能?

#include <stdio.h>
#include <string.h>

char *substr(const char mainstring[], const int cstart, const int clength){
    // printf(" %s \n ", substr("To many Strings", 8,7)); // = Strings
    int main_length = 0;
    int over_length = 0;
    
    main_length = strlen(mainstring); // gets the length of mainstring[]
    over_length = ( main_length - (cstart + clength)); // the value must be greater than -1 and less than the length of the mainstring[]

    
    char *result = malloc(clength+1); // initialize by adding +1 for terminator \ 0
    
    //That must be equal to or greater than 0 and less than the maximum length of the mainstring
    if ( over_length >= 0 && over_length <= (cstart + clength)) { 
    
    strncpy(result, mainstring+cstart, clength); // copies the selected part to result
    strcat(result, "\0"); // add terminator EOS end of string
    
    }else{
    printf("\n Error: Excessive size : %d", over_length); //shows when the condition is not met
    
    }
    return result;
}

int main(){

// use the function substr("String", start, length)

printf(" %s \n ", substr("To many Strings", 8,7)); // = Strings

return 0;
}
斯坦尼斯尔

您不能将数组作为值返回,因为在大多数上下文中,数组会自动衰减到指向其第一个元素的指针。因此

return result;

实际上是

return &result[0];

char*不是char[]

使用 C 返回数组中的答案中描述了解决方法特别是,用 包裹数组的那个struct很有趣。

顺便说一句。对称地,不能将数组作为函数参数传递。

当你看到

void fun(char arr[N])

它是一个语法糖:

void fun(char *arr)

N 被忽略。

有些人认为使用数组参数是一种不好的做法大多数情况下,因为arr在两个上下文中都不是数组,即sizeof(arr) == sizeof(char*).

实际上,使用数组很困难的

  • 它几乎在任何地方都衰减为指针
  • 按值传递数组将非常昂贵
  • 指向数组的指针的语法需要非常冗长的输入

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在纯 C 中,我们可以使用指向 char 的指针而不是指向 void 的指针来实现泛型函数吗?

我可以使用带有C ++ 17的std :: any指向成员变量的指针吗?

我可以使用指针作为C语言中的gets参数吗?

我可以在C ++中的for循环中使用指针吗?

我可以在C ++ Actor框架中使用C ++ 11智能指针作为消息返回类型吗?

C++ 如果指针指向 nullptr,我可以用数字替换它吗?

在C ++中,我们可以取消引用该指针吗?如果是这样,那么如何,如果不是,那么为什么?

我可以在 C++ 中创建通用函数指针吗?

C++ 我可以创建一个指向数组的指针吗?

Redis:我可以在Redis中存储包含指向数组的指针的ac/c++结构类型吗?

我可以像C#的Action一样使用C ++函数指针吗?

为什么不能重新分配字符串数组,但是字符串指针可以使用C语言?

我们可以在C语言中使用指针类型转换整数值吗?

C-我应该使用可变的函数指针数组吗

什么是限制指针,我们可以在C指针的号码吗?

我可以使用C / C ++编译器吗?

是否有另一种方法可以在 C 中返回数组而不是使用指针?

我可以在导出到c的c ++函数中使用`bool`类型或不透明的指针指向类吗?

我可以在C和C ++中可靠地将函数指针设置为NULL吗?

我可以使用@_silgen_name公开不是Swift功能的[Objective-] C或C ++符号吗?

C-我可以在结构中定义默认函数指针吗?

我们可以在C语言中将(void *)0称为void指针吗?

在C ++中,我可以在不局部声明结构的情况下将其作为指针传递吗?

我可以从指针地址获取NUMA节点(在Linux中为C)吗?

我可以直接从C ++中的向量元素的指针获取索引吗?

我是C ++的新手,可以在这种情况下解释指针吗

我可以使用Revo Uninstaller从驱动器D(不是C的分区)中删除程序吗?

我可以使用 python 服务器而不是 C++ 客户端建立 tcp/ip 套接字吗?

在C#中使用转换后的指针值的引用返回可以吗?