c - 理解字符串返回的问题
问题描述
有谁知道为什么变量 s2 没有被打印出来。如果我不使用声明函数,则此代码有效,而只是将整个代码放在 main.js 中。但是,如果我尝试声明为 int 函数或 void 函数,它不会打印任何内容。我认为这是我不理解的字符串的基本原理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int reverseOrderString()
{
char s1[100];
char s2[100];
int counter, end, begin = 0;
printf("Type in a string\n");
gets(s1);
while(s1[counter] != '\0')
{
counter++;
}
end = counter-1;
for (begin = 0; begin < counter; begin++)
{
s2[begin] = s1[end];
end--;
}
s2[begin] = '\0';
return s2;
}
int main()
{
printf("%s", reverseOrderString());
return 0;
}
解决方案
代码的多个问题:
- 未初始化的变量
- 返回函数返回后的本地数组不是有效的内存
- 更改为 fget
#include <stdio.h>
#include <string.h>
void reverseOrderString(char *s)
{
char s2[100];
int counter=0, end=99, begin = 0;
printf("Type in a string\n");
fgets (s2, 100, stdin);
while(s2[counter] != '\0')
{
counter++;
}
end = counter-1;
for (begin = 0; begin < counter; begin++)
{
s[begin] = s2[end-1];
end--;
}
s2[begin] = '\0';
return;
}
int main()
{
char str[100];
reverseOrderString(str);
printf("%s\n", str);
return 0;
}
输入:
Reverse me!!
输出:
!!em esreveR
推荐阅读
- java - 如何正确清理错误初始化的对象?
- javascript - 用两个值计算价格
- jquery - jQuery 函数在 Ajax 代码之前未触发
- typescript - 如何在用“TypeScript”编写的 Windows 上启动电子应用程序?
- azure-resource-manager - ARM 模板 - 验证参数
- c++ - STM32(在线使用 Mbed)在较高的模拟输入频率下显示延迟
- android - 无法解析配置 ':app:debugCompileClasspath' 的所有文件。> 找不到 com.android.support:support-v4:28.1.0
- flutter - 在颤动中动态地将小部件添加到列的子项
- c++ - 使用较新版本的 g++ 会导致多线程性能下降?
- jhipster - 如何将 Camunda 工作流引擎与 jhipster 生成的应用程序集成?