【发布时间】:2019-05-28 23:52:16
【问题描述】:
我想通过反转来更新字符数组。函数内部输出字符数组正确,调用函数后main不正确。
我相信字符数组是通过引用传递的,但是在更新数组时,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;
}
我不想在函数内部打印结果,而是通过调用函数StringReverse 来更新main 函数中的字符数组“ch”。
【问题讨论】:
-
“我相信字符数组是……”。 相信是一件危险的事情。我会先测试任何东西并确定它,然后继续相信。
-
您想使用
strncpy()而不是ch = sh;。 -
更改
StringReverse中指针的副本不会更改指向另一个函数中堆栈变量的指针。即使它有效,您仍然想使用本地堆栈变量,这是一个很大的“不”!只需使用一个字符串。
标签: c++ arrays char pass-by-reference pass-by-value