首页 > 解决方案 > 处理C中字符数组的引用传递

问题描述

当我像这样使用时,我想更改字符数组的值

char *str;
fun(str);

void fun(char *str) {
    str = (char *) ("changed");
}

它没有做任何事情并且 str 为 null

而以这种方式

char *str;
fun(&str);

void fun(char **str) {
    *str = (char **) ("changed");
}

一切都会好起来的。但是我有一个限制,将函数定义为 void fun(char *str),如何使用这个用例更改值

标签: cstring

解决方案


我想改变字符数组的值

,fun(char *str)str一个指针。要更改字符数组的值,请不要更改指针str。改变内存str指向的内容。

void fun(char *str) {
    // str = (char *) ("changed");
    str[0] = 'c';
    str[1] = 'h';
    str[2] = 'a';
    str[3] = 'n';
    str[4] = 'g';
    str[5] = 'e';
    str[6] = 'd';
    str[7] = '\0';
    // or simply 
    strcpy(str, "changed");
}

确保调用时指针引用可用空间

char buffer[100] = "Before";
printf("<%s>\n", buffer);
fun(buffer);
printf("<%s>\n", buffer);

推荐阅读