我编译了一段代码,并且使用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字符串的完整字符,还有任何提示?
答案 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"
修改字符串文字会导致不确定的行为,很可能在现代平台上会崩溃。