语言:C
我正在尝试编写一个C函数,它使用头文件char * strrev2(const char * string)作为面试准备的一部分,最接近(工作)的解决方案如下,但是我想要一个不包含malloc的实现... 这可能吗?因为它返回一个字符意味着如果我使用malloc,则必须在另一个函数中使用free。
char *strrev2(const char *string){
int l=strlen(string);
char *r=malloc(l+1);
for(int j=0;j<l;j++){
r[j] = string[l-j-1];
}
r[l] = '\0';
return r;
}
[编辑] 我已经使用缓冲区编写实现而没有使用char。谢谢你!
答案 0 :(得分:8)
不 - 你需要一个malloc。
其他选项包括:
const char *
并且不允许更改功能签名,因此无法在此处进行此操作。答案 1 :(得分:3)
你可以这样做,让调用者负责free
内存。或者您可以允许调用者传入已分配的char缓冲区,因此分配和free都由调用者完成:
void strrev2(const char *string, char* output)
{
// place the reversed string onto 'output' here
}
对于来电者:
char buffer[100];
char *input = "Hello World";
strrev2(input, buffer);
// the reversed string now in buffer
答案 2 :(得分:0)
您可以使用static char[1024];
(1024是示例大小),存储此缓冲区中使用的所有字符串并返回包含每个字符串的内存地址。以下代码段可能包含错误,但可能会提供您的想法。
#include <stdio.h>
#include <string.h>
char* strrev2(const char* str)
{
static char buffer[1024];
static int last_access; //Points to leftmost available byte;
//Check if buffer has enough place to store the new string
if( strlen(str) <= (1024 - last_access) )
{
char* return_address = &(buffer[last_access]);
int i;
//FixMe - Make me faster
for( i = 0; i < strlen(str) ; ++i )
{
buffer[last_access++] = str[strlen(str) - 1 - i];
}
buffer[last_access] = 0;
++last_access;
return return_address;
}else
{
return 0;
}
}
int main()
{
char* test1 = "This is a test String";
char* test2 = "George!";
puts(strrev2(test1));
puts(strrev2(test2));
return 0 ;
}
答案 3 :(得分:0)
反向字符串
char *reverse (char *str)
{
register char c, *begin, *end;
begin = end = str;
while (*end != '\0') end ++;
while (begin < --end)
{
c = *begin;
*begin++ = *end;
*end = c;
}
return str;
}