【问题标题】:C return character array from functionC从函数返回字符数组
【发布时间】:2014-04-11 17:35:46
【问题描述】:

我已经搜索并找到了许多从函数返回字符数组的解决方案,但它们都不起作用。我确信这在 C 中一定是可行的。 基本上,这就是我想做的。

char* Add( )
{
    char *returnValue = (char *) malloc( sizeof(char) * 3 );
    returnValue = "test"; //This doesn't work. I'm not at all interrested in doing returnValue[0] = 't', returnValue[1] = 'e', etc.
    return returnValue;
}

我希望你明白我想在这里做什么。

【问题讨论】:

  • 查看strcpy()。也不要期望能够将长度为 4 的字符串(+ 一个尾随 NULL)存储在 3 个字符的数组中。或者只是return "test";(然后你必须返回一个const char *。)
  • return strcpy(malloc(sizeof(char) * 5), "test");

标签: c arrays char return


【解决方案1】:

如果您不打算在程序中更改returnValue 指针指向的chars,您可以将其简化为:

char* Add( )
{
    return "test";
}

这个函数创建分配一个内存块,用以下内容填充它:

't' 'e' 's' 't' '\0'

然后返回第一个元素't' 的地址。根据答案there,分配给字符串文字的内存将一直保留到程序结束。

【讨论】:

  • 这行得通,但返回的缓冲区(或“数组”,如果你愿意的话)是不可修改的。 char *p = Add() ; p[0] = 'A'; 会使程序崩溃。
  • @MichaelWalz 因此先决条件“如果你不打算改变......”,但重新警告那个特别重要的事情也不错.
【解决方案2】:

赋值returnValue = "test" 使returnValue 变量指向内存中的不同空间。不影响你刚才malloc分配的空间;此外,由于不再引用此空间,因此在您的程序退出之前,它将保持已分配但未使用。

您需要将字符串复制到刚刚分配的空间中。标准库中有一个函数:strcpy(在<string.h> 中声明)。请注意,strcpy 不会检查目标缓冲区是否足够大,您需要在调用它之前确保它。

您要返回的字符串是 4 个字节长,加上空终止符是 5。所以您需要分配(至少)5 个字节,而不是 3 个。

char* Add()
{
    char *returnValue = malloc(sizeof(char) * 5);
    strcpy(returnValue, "test");
    return returnValue;
}

【讨论】:

  • 那行不通。给我一个错误,说错误 C2040: 'visaDeltagare' : 'char *()' 在间接级别上与 'char ()' 不同
  • @user3194111 请告诉我们你如何调用这个函数Add。这应该可以工作。
  • 我用 printf(Add());并声明(?)它为 char * Add();在 Header.h 中
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 2014-02-06
  • 2013-11-22
  • 2014-11-06
  • 2020-02-14
相关资源
最近更新 更多