gpt4 book ai didi

c - 使用递归反转字符串 - 出现 'Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)' 错误

转载 作者:行者123 更新时间:2023-11-30 21:05:02 25 4
gpt4 key购买 nike

我尝试使用以下代码反转字符串,但收到错误线程 1:EXC_BAD_ACCESS (code=1,address=0x0)

我知道它告诉我我正在尝试访问 NULL 指针,但我看不到在哪里:

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

int empty(char s[]){
return strcmp(s, "") == 0 ? 1 : 0;
}

char getHead(char s[]){
char *dup = (char *)malloc(sizeof(char));
strcpy(dup, (s + 0));
return *dup;
}

char * getTail(char s[]){
char *dup = malloc(sizeof(char) * strlen(s) - 1);
for(int i = 0; i < strlen(s) - 1; i++){
dup[i] = s[i+1];
}
return dup;
}

char * ReverseStringHeadTail(char s[]){
if(empty(s))
{
return NULL;
}
else
{
char head = getHead(s);
char *tail = getTail(s);
return strcat(ReverseStringHeadTail(tail), head); // Error: Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
}
}

int main(int argc, const char * argv[]) {
char string[] = "string";
printf("%s\n", ReverseStringHeadTail(string));

return 0;
}

谢谢!

最佳答案

函数empty可以写得更简单。

int empty( const char *s )
{
return *s == '\0';
}

函数getHead无效且没有意义。它为一个字符分配内存,但试图复制整个字符串。它的调用会导致内存泄漏。

你可以直接写

char getHead( const char *s )
{
return *s;
}

函数getTail也无效。例如,如果字符串是 "A",则该函数会分配 0 字节的内存。在任何情况下,分配的内存都不会包含字符串。

函数 strcat 不能与 char 类型的对象或空指针一起使用。

您的意思似乎如下。

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

char * ReverseStringHeadTail( const char *s )
{
if ( *s == '\0' ) return calloc( 1, 1 );

char tmp[2] = { *s, '\0' };

char *p = ReverseStringHeadTail( s + 1 );
p = realloc( p, strlen( p ) + sizeof( tmp ) );

return strcat( p, tmp );
}

int main(void)
{
const char *s = "12345";

puts( s );

char *p = ReverseStringHeadTail( s );

puts( p );

free( p );

return 0;
}

程序输出如下

12345
54321

注意该函数并不检查内存是否分配成功。

关于c - 使用递归反转字符串 - 出现 'Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56927444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com