【问题标题】:String as function argument and returning string from function in C字符串作为函数参数并从C中的函数返回字符串
【发布时间】:2018-03-14 06:26:09
【问题描述】:

我想执行以下操作,将一个字符串作为函数参数传递,该函数会将一个字符串返回给 main。简要思路如下:

String str1 = "Hello ";
String received = function(str1);
printf("%s", str3);


String function (String data){
   String str2 = "there";
   String str3 = strcat(str3, str1);             
   String str3 = strcat(str3, str2);         //str3 = Hello there
   return str3;
}

我如何将这个想法翻译成 C 语言?谢谢。

【问题讨论】:

  • 你应该阅读strcat
  • 是的,我理解串联部分。在将字符串作为函数参数传递以及将字符串从函数返回到主函数时,我需要帮助。谢谢。

标签: c string parameters arguments


【解决方案1】:

你可以试试这个:

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

char * function(char * data);

char * function(char * data)
{
    char * str2 = "there";

    char * str3 = NULL;

    if (data == NULL)
            return NULL;

    int len = strlen (data) + strlen (str2);

    str3 = (char *) malloc (len + 1);

    snprintf (str3, (len+1), "%s%s", data, str2);

    return str3;
}

int main()
{
    char * str1 = "Hello ";

    char * received = function(str1);

    if (received != NULL)
            printf("%s\n", received);
    else
            printf ("received NULL\n");

    if (received != NULL)
        free (received);

    return 0;
}

【讨论】:

    【解决方案2】:

    字符串或字符数组基本上是指向内存位置的指针,您可能已经知道了。所以从函数中返回一个字符串,基本上就是返回指向字符数组开头的指针,这个指针存储在字符串名称本身中。

    但请注意,您永远不应该传递局部函数变量的内存地址。访问这种内存可能会导致Undefined Behaviour

    #include <stdio.h>
    #include <string.h>
    
    #define SIZE 100
    
    char *function(char aStr[]) {
      char aLocalStr[SIZE] = "there! ";
      strcat(aStr, aLocalStr);
      return aStr;
    }
    
    
    int main() {
      char aStr[SIZE] = "Hello ";
      char *pReceived;
      pReceived = function(aStr);
      printf("%s\n", pReceived);
      return 0;
    }
    

    我希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您可能想了解如何在 C 中正确连接字符串

      How do I concatenate const/literal strings in C?

      这会有所帮助

      【讨论】:

      • 我理解串联部分。在将字符串作为函数参数传递以及将字符串从函数返回到主函数时,我需要帮助。谢谢。
      最近更新 更多