You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将函数输入数组的所有元素改为字符'?'?代码问题咨询

修改函数输入数组元素值的方法及代码修复

一、你的代码问题及修正

你当前代码的核心错误是传入了只读的字符串字面量:"The String!"属于字符串字面量,C++中它被存储在只读内存区域,不允许修改,强行赋值s1[i] = '?'会触发未定义行为(比如程序崩溃)。

修正后的代码如下:

#include <iostream>
#include <cstring>
using namespace std;

void something(char s1[]) {
    // 先计算数组长度,避免循环中重复调用strlen
    int str_len = strlen(s1);
    for (int i = 0; i < str_len; i++) {
        s1[i] = '?';
    }
}

int main() {
    // 定义可修改的字符数组,将字符串字面量复制到栈内存中
    char input_str[] = "The String!";
    something(input_str);
    // 输出修改后的结果,应该是一串'?'
    cout << input_str << endl;
    getch();
    return 0;
}

二、如何在函数内部修改输入数组的元素值

在C++中,数组作为函数参数传递时,会自动退化为指向数组首元素的指针(函数参数里的char s1[]等价于char* s1)。这意味着函数内部操作的就是原数组的内存地址,直接通过指针修改元素值,就会同步改变原数组的内容。

需要注意两个关键点:

  • 不能传入只读的内存区域(比如字符串字面量),必须传入可修改的数组(比如栈上定义的char input_str[])。
  • 要确保函数能正确获取数组长度:可以像代码中那样用strlen(针对字符串),或者额外传递一个长度参数(针对非字符串数组),避免数组越界访问。

内容的提问来源于stack exchange,提问作者user17712216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:05:26