如何修改函数内的字符数组

How modify character arrays inside functions?

本文关键字:字符 数组 函数 何修改 修改      更新时间:2023-10-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] = '';
    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] = '';
    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 而不是普通的字符数组,则执行此操作会容易得多。例如,您可以使用 std::reverse .