gpt4 book ai didi

c - 从指针生成整数,从整数生成指针,不进行强制转换

转载 作者:行者123 更新时间:2023-11-30 16:48:10 25 4
gpt4 key购买 nike

我有一个函数,它接受一个字符串并返回它的反转形式:

char reverse_string(char* message){

char* reversed="";
assert(message!=NULL);

int last_index=strlen(message)-1;
int a;

for(a=0; a <strlen(message);a++){
strcat(reversed, &message[last_index]);
last_index--;
}

return reversed;
}

然后调用它,我这样做了:

strncpy(rev_one, reverse_string(msg_one), MAX_LENGTH);

变量声明如下:

char* msg_one;
char* msg_two;
char* rev_one;
char* rev_two;

我基本上是反转一个字符串,然后将其存储到另一个字符串中。我没有收到任何其他错误,除了:

 ../display.c: In function 'reverse_string':
../display.c:38: warning: return makes integer from pointer without a cast
../display.c: In function 'string_init':
../display.c:45: warning: passing argument 2 of 'strncpy' makes pointer from integer without a cast
../display.c:46: warning: passing argument 2 of 'strncpy' makes pointer from integer without a cast

我在另一篇文章中读到,函数不应该有 return 语句,除非它分配传递的变量,但我的将反转的字符串存储在另一个变量中。删除 return 语句是个好主意吗?我将如何解决这个问题,非常感谢您的帮助,谢谢!

更新:我阅读了所有评论,这是我的最终代码,我尝试了内存分配并修复返回类型,代码没有返回错误,但我想确保它是好的,我会很感激一些反馈:

char* reverse_string(char* message){

assert(message!=NULL);
char* reversed=(char*)malloc(sizeof(char));

if (reversed == 0)
{
printf("ERROR: Out of memory\n");
}


int last_index=strlen(message)-1;
int a;

for(a=0; a <strlen(message);a++){
strcat(reversed, &message[last_index]);
last_index--;
}

return reversed;
}

我想分配内存 ass reversed[MAX_LENGTH] 其中 #define MAX_LENGTH 20 但我一直收到错误消息“函数返回局部变量的地址”,所以我使用malloc 相反,尽管我对此只有基本知识。

更新2好的,我更新了最后的代码并根据建议修复了内存分配大小

我还从下面的评论中记下了一些笔记,并制定了另一种快速方法

char* reverse_string_into(char* reversed, char* message){
assert(message!=NULL);

const size_t len = strlen(message);
const size_t last = len - 1;

int i;
for (i=0; i<len; i++){
reversed[i] = message[last - i];
}
return NULL;
}

能行吗?我又回到内存问题了吗?

最佳答案

警告是由于代码中的以下问题引起的:

下面的原型(prototype)是不正确的,因为您的意图是返回 char * 而不是 char

 char reverse_string(char* message) 

应该是

char *reverse_string(char* message) 
<小时/>

以下问题不会引起您的警告,但是您的代码中仍然存在此问题:

此外,在函数reverse_string中,您应该分配内存并将其指向reversed。目前,没有内存分配给 reversed,当您执行 strcat 时,它将导致写入不属于您的内存,并可能导致未定义的行为。传递给 strcat 的目标字符串中必须有足够的内存来保存结果(连接字符串)。其使用方法请引用strcat的man page。

关于c - 从指针生成整数,从整数生成指针,不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061134/

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