c - 在 C 中修改函数内的 char 数组

标签 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 之类的东西?

最佳答案

In short, is there any way I can take in a char *input into a function and modify its original memory address without using something like memcpy from string.h?

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

char *test = "Bad";

在程序的只读内存中创建 "Bad" 并且 test 指向该内存。更改它会导致未定义的行为。

如果你想创建一个可修改的字符串,使用:

char test[] = "Bad";

关于c - 在 C 中修改函数内的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28801144/

相关文章:

c - 为什么在这个 switch 语句中匹配 default 大小写?

c - 关于结构的边界问题

arrays - 如何在线性时间内按升序查找 3 个数字并在数组中增加索引

php - 如何从对象中选择整数?

C - int 和 long 具有相同的大小和最大值

c - 提升指向未定义位置的指针是否合法?

javascript - 如何在javascript中使用二维数组填充下拉列表

ios - 使用 Swift 2.0 从 Parse 检索数据

javascript - 检查 Javascript 数组中是否存在标签

java - Android AudioRecord 强制另一个流到 MIC 音频源