/*
* 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;
}
Run Code Online (Sandbox Code Playgroud)
这段代码有一些怪癖:
sReverse = reverse(sPhrase);
return sOutput;
这些警告意味着什么?我该如何修补错误?该函数应该将char*作为返回类型和参数保留,因为我将这个小程序作为C培训课程的一部分.
我看到一些问题.首先,char* sOutput[STRMAX]是一系列char*的 - 可能是你的意思char sOutput[STRMAX]?
其次,更重要的是,当你以某种方式在函数中声明一个数组(char sOutput[STRMAX])时,它会在堆栈上分配并在函数返回时释放.因此,如果你试图返回它,你会得到未定义的结果,因为它在技术上不再存在!
解决方案是将缓冲区传递给函数以供其使用:
char* reverse(char const sPhrase[], char sOutput[])
Run Code Online (Sandbox Code Playgroud)
(我添加了const所以你不小心覆盖了sPhrase).然后reverse像这样打电话:
reverse(sPhrase, sReverse);
Run Code Online (Sandbox Code Playgroud)
至于你的算法是否有效......
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |