修改C中函数内的char数组

DrB*_*owe 4 c arrays

所以我最近一直在玩C,并且一直试图理解通过值/引用传递的复杂性以及在函数内操作传入变量的能力.然而,我遇到了以下问题:

void modifyCharArray(char *input)
{
    //change input[0] to 'D'
    input[0] = 'D';
}

int main()
{
    char *test = "Bad";
    modifyCharArray(test);
    printf("Bad --> %s\n", test);
}
Run Code Online (Sandbox Code Playgroud)

所以想法只是修改函数内的char数组,然后在修改完成后打印出所有数组.但是,这会失败,因为我所做的只是修改input传入的值,而不是实际的内存地址.

简而言之,有没有什么方法可以让我char *input进入一个函数并修改它的原始内存地址而不使用像memcpystring.h 这样的东西?

R S*_*ahu 11

简而言之,有没有什么方法可以让我char *input进入一个函数并修改它的原始内存地址而不使用像memcpystring.h 这样的东西?

是的你可以.你的功能modifyCharArray正在做正确的事情.你所看到的是由那个事实引起的

char *test = "Bad";
Run Code Online (Sandbox Code Playgroud)

"Bad"在程序的只读存储器中创建并test指向该存储器.更改它是导致未定义的行为.

如果要创建可修改的字符串,请使用:

char test[] = "Bad";
Run Code Online (Sandbox Code Playgroud)

  • 第二个答案对此有很好的视觉效果...... http://stackoverflow.com/questions/1335786/c-differences-between-char-pointer-and-array (2认同)
  • `char*test ="Bad";`和`char test [] ="Bad";`之间有很多区别,你需要至少知道其中的一些(目前主要的是数组可以修改,但字符串文字不能 - 另一个是如果您的编译器设置适当繁琐,它会告诉您何时将字符串文字指针指定给非const`char*`). (2认同)