如何修改函数内的字符数组?
How modify character arrays inside functions?
我想通过反转来更新字符数组。函数内部输出的字符数组正确,调用函数后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] = '[=10=]';
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;
。正如其他人善意指出的那样,您没有修改 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] = '[=10=]';
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;
}
StringReverse
函数中的 ch
是该函数的局部变量。这就是为什么当分配 ch = sh;
时,它不会更改 main
中的 ch
。
虽然您可以复制 sh
,但更好的方法是就地使用反向 ,这样您就根本不需要本地副本。
例如:
void StringReverse(char *ch, int size){
for(int i = 0, j= size - 1 ; i < j ; i++, j--){
int t = ch[i];
ch[i] = ch[j];
ch[j] = t;
}
cout << ch << endl;
}
如果您使用 std::string
而不是普通的 char 数组,这样做会容易得多。例如,您可以使用 std::reverse
.
我想通过反转来更新字符数组。函数内部输出的字符数组正确,调用函数后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] = '[=10=]';
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;
。正如其他人善意指出的那样,您没有修改 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] = '[=10=]';
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;
}
StringReverse
函数中的 ch
是该函数的局部变量。这就是为什么当分配 ch = sh;
时,它不会更改 main
中的 ch
。
虽然您可以复制 sh
,但更好的方法是就地使用反向 ,这样您就根本不需要本地副本。
例如:
void StringReverse(char *ch, int size){
for(int i = 0, j= size - 1 ; i < j ; i++, j--){
int t = ch[i];
ch[i] = ch[j];
ch[j] = t;
}
cout << ch << endl;
}
如果您使用 std::string
而不是普通的 char 数组,这样做会容易得多。例如,您可以使用 std::reverse
.