如何在C语言中实现返回反转字符串的函数?现有代码求修正
C语言字符串反转函数的修复方案
原代码的问题分析
- 函数返回的
reverse指向局部变量temp的地址,函数执行完毕后局部变量会被销毁,返回的是野指针,访问该指针会导致未定义行为。 - 没有为反转后的字符串分配内存空间,无法存储完整的反转结果。
- 违反了“不允许使用printf输出结果”的要求,原代码中存在printf调用。
修复后的代码
#include <stdlib.h> #include <string.h> char *reverse_string(char *param_1) { int n = strlen(param_1); // 为反转后的字符串分配内存,包含终止符'\0' char *reverse = (char *)malloc(n + 1); if (reverse == NULL) { return NULL; // 内存分配失败时返回NULL } for (int i = 0; i < n; i++) { // 从原字符串末尾开始复制到新字符串的开头 reverse[i] = param_1[n - 1 - i]; } reverse[n] = '\0'; // 添加字符串终止符 return reverse; } int main() { char *str = "games"; char *reversed = reverse_string(str); // 可在此处使用反转后的字符串,后续需手动释放内存避免泄漏 free(reversed); return 0; }
关键说明
- 内存分配:用
malloc分配原字符串长度+1的内存(额外空间存储终止符),确保反转结果有合法存储区域。 - 内存释放:调用
reverse_string后,必须在合适时机用free释放内存,避免内存泄漏。 - 终止符处理:字符串必须以
'\0'结尾,否则无法被C语言字符串函数正确识别。 - 野指针规避:返回堆上分配的内存地址,函数执行完毕后不会被销毁,是合法有效的指针。
内容的提问来源于stack exchange,提问作者Femi-Laizer
相关产品推荐
相关产品推荐

