修改C中函数内的char数组

时间:2015-03-02 00:46:12

标签: 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);
}

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

简而言之,有没有什么方法可以将char *input放入函数并修改其原始内存地址而不使用来自string.h的memcpy之类的东西?

1 个答案:

答案 0 :(得分:9)

  

简而言之,有没有什么方法可以将char *input放入函数并修改其原始内存地址而不使用来自string.h的memcpy之类的东西?

是的,你可以。你的函数modifyCharArray正在做正确的事。您所看到的是由

这一事实引起的
char *test = "Bad";

在程序的只读内存中创建"Bad"test指向该内存。改变它是造成未定义行为的原因。

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

char test[] = "Bad";