MST

星途 面试题库

面试题:C++ 中 const char *p 与 char * const p 在函数参数传递中的错误场景分析

假设有如下函数定义: ```cpp void modifyString(char * const str) { str = "new string"; } ``` 这段代码在调用时会出现什么问题?请详细分析并说明如何修改代码以避免错误。
17.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

问题分析

  1. 参数类型:函数modifyString的参数str是一个指向常量字符的常量指针。这里的const修饰指针本身,意味着指针不能被重新赋值。
  2. 代码错误:在函数内部执行str = "new string";时,试图重新赋值指针str,这与指针str被声明为常量指针相冲突,因此会导致编译错误。

修改方案

  1. 修改参数类型:如果想让函数能够修改指针指向的内容,可以去掉指针本身的const修饰,即修改为char *str
  2. 正确修改字符串内容:如果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')。