c++ - 如何修改函数内部的字符数组?
问题描述
我想通过反转来更新字符数组。字符数组在函数内部输出时正确,但在main
函数调用后不正确。
我相信字符数组是通过引用传递的,但是在更新数组时,主函数中的字符数组并没有更新。我在这里做错了什么?
#include <iostream>
#include <cstring>
using namespace std;
void StringReverse(char *ch, int size){
char sh[100] = {0};
for(int i=0 ; i<size ; i++){
sh[i] = ch[size-1-i];
}
sh[size] = '\0';
ch = sh;
cout<<ch<<endl;
}
int main(){
char ch[100];
cin.getline(ch, 100);
int size = strlen(ch);
StringReverse(ch,size);
cout<<ch;
}
我不想在函数内部打印结果,而是main
通过调用函数来更新函数中的字符数组“ch” StringReverse
。
解决方案
您想使用strncpy()
而不是ch = sh;
. 正如其他人所指出的那样,您没有修改ch
. 您只修改局部变量sh
。
#include <iostream>
#include <cstring>
using namespace std;
void StringReverse(char *ch, int size){
char sh[100] = {0};
for(int i=0 ; i<size ; i++){
sh[i] = ch[size-1-i];
}
sh[size] = '\0';
strncpy(ch, sh, 100);
cout<<ch<<endl;
}
int main(){
char ch[100];
cin.getline(ch, 100);
int size = strlen(ch);
StringReverse(ch,size);
cout<<ch;
}
推荐阅读
- c# - 从 C# 以半并行方式运行 python 进程
- android-studio - 转到下一页时如何将数据保存在编辑框中,再次返回,数据仍然存在?安卓工作室
- apache-kafka - 使用文档中提供的 Kafka 休息配置选项 consumer.instance.timeout.ms 的问题
- azure-machine-learning-service - “MSSQL”在打开连接时遇到了“InvalidOperationException”类型的意外异常,HResult 为“x80131509”
- angular - 如何在 Angular 中创建一个公共子组件
- postgresql - 未显示 Postgres 导入的表,手动创建时出现“已存在”错误
- html - 如何在html输入中只允许罗马数字字符?
- angular - 出现控制台错误:没有当前规范时使用了“期望”,这可能是因为异步测试超时?
- javascript - Google PageSpeed Insights 显示未使用的 javascript 但已使用
- python - 关于 manim 和 png 图像的新手问题