在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[]中字符串的最大长度
不太清楚。可能有一些长度?