首页 > 解决方案 > 如何修改函数内部的字符数组?

问题描述

我想通过反转来更新字符数组。字符数组在函数内部输出时正确,但在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

标签: c++arrayscharpass-by-referencepass-by-value

解决方案


您想使用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;
}

推荐阅读