所以我最近一直在玩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
之类的东西?
答案 0 :(得分:9)
简而言之,有没有什么方法可以将
char *input
放入函数并修改其原始内存地址而不使用来自string.h的memcpy
之类的东西?
是的,你可以。你的函数modifyCharArray
正在做正确的事。您所看到的是由
char *test = "Bad";
在程序的只读内存中创建"Bad"
,test
指向该内存。改变它是造成未定义行为的原因。
如果要创建可修改的字符串,请使用:
char test[] = "Bad";