在C语言中处理字符数组的按引用传递

在C语言中处理字符数组的按引用传递,c,string,C,String,当我这样使用时,我想更改字符数组的值 char *str; fun(str); void fun(char *str) { str = (char *) ("changed"); } 它什么都不做,str为null 鉴于以这种方式 char *str; fun(&str); void fun(char **str) { *str = (char **) ("changed"); } 天气很好。 但是我有一个限制,将函数定义为

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

char *str;
fun(str);

void fun(char *str) {
    str = (char *) ("changed");
}
它什么都不做,str为null

鉴于以这种方式

char *str;
fun(&str);

void fun(char **str) {
    *str = (char **) ("changed");
}
天气很好。 但是我有一个限制,将函数定义为voidfun(char*str),如何使用这个用例更改值

我想更改字符数组的值

使用
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);
char缓冲区[100]=“之前”;
printf(“\n”,缓冲区);
乐趣(缓冲);
printf(“\n”,缓冲区);

通常的使用情况是,您有一个传递给函数的数组。在大多数情况下,数组类型的表达式将转换(或“衰减”)为指针类型的表达式,指针的值将是数组第一个元素的地址。例如:

#define SOME_SIZE 20   // Size of the longest string you intend to store; 20 is just an example

void fun( char *str )
{
  strncpy( str, "changed", SOME_SIZE );
  str[SOME_SIZE] = 0; // make sure string is terminated if SOME_SIZE <= strlen("changed")        
}

int main( void )
{
  char buf[SOME_SIZE+1] = "foo"; // +1 for 0 terminator
  printf( "buf before fun - %s\n", str );
  fun( buf );
  printf( "buf after fun - %s\n", str );
  return EXIT_SUCCESS;
}
#定义一些_size20//要存储的最长字符串的大小;20只是一个例子
虚无乐趣(char*str)
{
strncpy(str,“改变”,一些大小);
str[SOME_SIZE]=0;//如果某个大小
*str=(char**)(“已更改”)
错误,请确保字符串被终止;不要使用
(char**)
强制转换
char*
,第一个代码段也是错误的,您正在更改局部变量的值。如何使用此用例更改值:使用
strcpy
(char*str){strcpy(str,changed);}
str
必须指向分配的空间(一个数组或通过
malloc
),空间足够存储有关字符串的“changed”,例如
“changed”
,我发现长度为7,大小为8。使用
某些大小
作为
buf[]中字符串的最大长度
不太清楚。可能有一些长度?