面试题答案
一键面试问题分析
- 参数类型:函数
modifyString
的参数str
是一个指向常量字符的常量指针。这里的const
修饰指针本身,意味着指针不能被重新赋值。 - 代码错误:在函数内部执行
str = "new string";
时,试图重新赋值指针str
,这与指针str
被声明为常量指针相冲突,因此会导致编译错误。
修改方案
- 修改参数类型:如果想让函数能够修改指针指向的内容,可以去掉指针本身的
const
修饰,即修改为char *str
。 - 正确修改字符串内容:如果
str
指向的内存空间足够,直接修改其内容,而不是重新赋值指针。例如,如果要修改原字符串内容,可以使用strcpy
等函数。
以下是修改后的代码示例:
#include <iostream>
#include <cstring>
void modifyString(char *str) {
std::strcpy(str, "new string");
}
int main() {
char original[20] = "old string";
modifyString(original);
std::cout << original << std::endl;
return 0;
}
在上述代码中:
- 函数
modifyString
的参数str
不再是常量指针。 - 使用
std::strcpy
函数将新字符串复制到原字符串所在的内存空间,前提是原字符串的空间足够容纳新字符串。main
函数中定义的original
数组大小为20,可以容纳新字符串"new string"(包括终止符'\0'
)。