从C中的函数返回char时出错

时间:2017-11-09 16:00:39

标签: c arrays linux char

#define SIZE 1024
char encryptEVEN(char *c)
{
    int i;
    i = 0;
    char enEVEN[SIZE], temp[SIZE];
    while (/*c[i] != NULL &&*/c[i] != '\0')
    {
        if (i % 2 == 0 || i - 3 == 0)
        {
            enEVEN[i] = c[i];
            i++;
        }
    }
    strcpy(temp, enEVEN);
    return enEVEN;
}

int main()
{
    char charr[SIZE], enEVEN[SIZE];
    strcpy(enEVEN, encryptEVEN(charr));
    printf("%s", enEVEN);
}

您好, 我试图传递并返回C中的一个字符但我一直收到警告并且没有输出显示我认为问题在于函数的返回..我可以得到一些帮助

2 个答案:

答案 0 :(得分:4)

您有两个主要问题:

第一个是你使用错误的返回类型。您尝试返回指针(指向enEVEN的第一个元素),即char *类型的指针。但返回类型是char,而不是指针。

更糟糕的问题是你返回一个指向enEVEN的第一个元素的指针,它是一个局部变量。从函数返回后,局部变量超出范围并且不再存在。这意味着您要返回的指针将无效,它将指向执行return语句后不存在的内容。

要解决第一个问题,请将返回类型更改为char *。要解决第二个问题,请将数组enEVEN作为参数传递给函数。

还存在第三个问题,与上述问题无关:在main函数中,您不会初始化charr数组。它的内容将是不确定(看似随机)。

答案 1 :(得分:1)

我不太确定,但你可能想要这个:

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

#define SIZE 1024

void encryptEVEN(const char *c, char *destination)
{
  int i = 0;
  int j = 0;

  while (c[i] != '\0')
  {
    if (i % 2 == 0 || i - 3 == 0)
    {
      destination[j++] = c[i];
    }

    i++;
  }

  destination[j] = '\0';             // string terminator
}

int main()
{
  char charr[SIZE], enEVEN[SIZE];

  strcpy(charr, "Hello World!");  // put something meaningful into the source string

  encryptEVEN(charr, enEVEN);
  printf("%s\n", enEVEN);
}

输出结果为:

  

HlloWrd