gpt4 book ai didi

C: char* 问题

转载 作者:行者123 更新时间:2023-12-02 07:53:47 25 4
gpt4 key购买 nike

/*
* code.c
*
* TASK
* Reverse a string by reversing pointers. Function should use return
* type char* and use a char* parameter as input.
*/
#include <stdio.h>
#include <string.h>
#define STRMAX 51

char* reverse(char* sPhrase[]);

int main() {
char sPhrase[STRMAX];
char sReverse[STRMAX];
printf("Enter string (max. 50 chars): ");
gets(sPhrase);
sReverse = reverse(sPhrase);

return 0;
}

char* reverse(char* sPhrase[]) {
char* sOutput[STRMAX];
int iCnt = 0, iCntRev;

for (iCntRev = strlen(*sPhrase)-2; iCntRev >= 0; iCntRev--) {
sOutput[iCnt] = sPhrase[iCntRev];
iCnt++;
}

*sOutput[iCnt] = '\0'; // Don't forget to close the string

return sOutput;
}

这段代码有一些怪癖:

  • sReverse = reverse(sPhrase);

    • [错误] 赋值类型不兼容
    • [警告] 从不兼容的指针类型传递 `reverse' 的 arg 1
  • 返回sOutput;

    • [警告]函数返回局部变量地址
    • [警告] 从不兼容的指针类型返回

这些警告是什么意思?如何修补错误?该函数应将 char* 作为返回类型和参数,因为我将这个小程序作为 C 培训类(class)的一部分。

最佳答案

我看到了一些问题。首先,char* sOutput[STRMAX]char* 的数组的 - 大概你的意思是char sOutput[STRMAX]

其次,更重要的是,当您以这种方式在函数中声明数组时 (char sOutput[STRMAX]),它会在堆栈上分配并在函数返回时释放。因此,如果您尝试返回它,您将得到未定义的结果,因为从技术上讲它不应该再存在了!

解决方案是将缓冲区传递给函数以供其使用:

char* reverse(char const sPhrase[], char sOutput[])

(我添加了 const,这样您就不会不小心覆盖 sPhrase)。然后调用reverse像这样:

reverse(sPhrase, sReverse);

现在至于你的算法是否有效......

关于C: char* 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117516/

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