如何将函数输入数组的所有元素改为字符'?'?代码问题咨询
修改函数输入数组元素值的方法及代码修复
一、你的代码问题及修正
你当前代码的核心错误是传入了只读的字符串字面量:"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
相关产品推荐
相关产品推荐

