在C中返回字符串

时间:2018-07-26 03:23:00

标签: c algorithm

我编译了一段代码,并且使用printf可以正常工作,但是我希望不打印就将其返回..

char *ft_strrev(char *str)
{

    int i = 0;
    while (str[i] != '\0')
    {
        i++;
    }

    while (i != 0)
    {
        i--;
    }
    return str;

}

int main ()
{
    char *string;
    string = "amrani";

    ft_strrev(string);
}

这里最主要的是反转输入的.. 我怎么能完全使用 return ,返回给我的 var字符串的完整字符,还有任何提示?

2 个答案:

答案 0 :(得分:3)

有两种方法可以执行此操作:创建一个新字符串,然后将其返回或在适当位置修改参数。这是根据您的说明添加的新字符串版本。请注意,已为新字符串分配了内存,并且调用方应free返回结果:

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

char *ft_strrev(char *str)
{
    int len = strlen(str);
    char *reversed = malloc(sizeof(*reversed) * (len + 1));
    reversed[len] = '\0';

    while (*str != '\0')
    {
        reversed[--len] = *str++;
    }

    return reversed;
}

int main()
{
    char *string = "amrani";
    char *reversed = ft_strrev(string);
    printf("%s\n", reversed);
    free(reversed);
}

请注意,许多此类函数会将字符串的长度作为第二个参数,因此该函数不必调用strlen

答案 1 :(得分:0)

此解决方案将字符串反转就位。

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

char *ft_strrev(char *str)
{
  int len = strlen(str);

  for (int i = 0; i < len / 2; i++)
  {
    char temp = str[i];
    str[i] = str[len - i - 1];
    str[len - i - 1] = temp;
  }

  return str;
}

int main()
{
  char string[] = "amrani";
  ft_strrev(string);       // return value of ft_strrev not used here
  printf("%s", string);
}

请注意这之间的区别:

char string[] = "amrani";  // string is an array of chars initialized with "amrani"

这:

char *string = "amrani";   // string is a pointer to the string literal "amrani"

修改字符串文字会导致不确定的行为,很可能在现代平台上会崩溃。