C 使用函数将字符中的null替换为字母?

C 使用函数将字符中的null替换为字母?,c,function,null,C,Function,Null,所以我很难用一个函数替换一个设置为null的char变量。在我的函数中,变量是可以更改的,但是在主函数中它保持为null,所以我不确定我在做什么 我写的代码基本上是 int main(){ char a='\0'; somefunction(a); return 0; } 功能为 somefunction(char a){ scanf(" %c",&a); } 因此,如果我输入B,函数中的a值将是B,但main中的a值将保持为\0。a仅在本地上下文中被更改,因为

所以我很难用一个函数替换一个设置为null的char变量。在我的函数中,变量是可以更改的,但是在主函数中它保持为null,所以我不确定我在做什么

我写的代码基本上是

int main(){

    char a='\0';

    somefunction(a);
return 0;
}
功能为

somefunction(char a){

scanf(" %c",&a);
}

因此,如果我输入B,函数中的a值将是B,但main中的a值将保持为\0。

a仅在本地上下文中被更改,因为您正在传递a的值,并且它正在本地更改

要解决这个问题,您需要更改签名,以便可以在更大的上下文(即调用函数)中更改a的值

试试像这样的东西

somefunction(char *a) {
    scanf("%c",a);
}

现在,您传递a的地址(即
&a
而不是a),它应该可以工作。

a仅在本地上下文中被更改,因为您传递的是a的值,并且它在本地被更改

要解决这个问题,您需要更改签名,以便可以在更大的上下文(即调用函数)中更改a的值

试试像这样的东西

somefunction(char *a) {
    scanf("%c",a);
}

现在您传递a的地址(即
&a
而不是a),它应该可以工作。

在C中,变量是通过值传递的,而不是通过引用传递的(除非您另有指定)。也就是说,程序将值
'\0'
传递给函数,而不是对变量
a
的任何引用

如果要影响变量本身,则需要使用指针


请注意,在您的示例中已经这样做过一次,当您在C中传递指向
scanf

的指针时,变量是通过值传递的,而不是通过引用传递的(除非您另有指定)。也就是说,程序将值
'\0'
传递给您的函数,而不是对变量
a
的任何引用

somefunction(char *a) {
    scanf(" %c", a);
}

char a;
somefunction(&a);
如果要影响变量本身,则需要使用指针


请注意,在您的示例中,您已经这样做过一次,当您将指针传递到
scanf
时,当您调用
somefunction
时,您的程序会在堆栈上创建
a
的新副本。您将
a
副本的地址传递到
scanf
。当您的函数返回时,原始
a保持不变

somefunction(char *a) {
    scanf(" %c", a);
}

char a;
somefunction(&a);
您需要使
somefunction
获取指向main的
a
副本的指针,然后将该指针直接传递给
scanf

somefunction(char *a) {
    scanf(" %c", a);
}

char a;
somefunction(&a);

调用
somefunction
时,程序会在堆栈上创建
a
的新副本。您正在将
a
副本的地址传递给
scanf
。当函数返回时,main中原始的
a
将保持不变

您需要使
somefunction
获取指向main的
a
副本的指针,然后将该指针直接传递给
scanf

somefunction(char *a) {
    scanf(" %c", a);
}

char a;
somefunction(&a);
使用
scanf(“%c”和&a);
code将
a的地址提供给
scanf()
以便
scanf()
可以在该地址分配某些内容

somefunction();
执行同样的操作,为它指定一个地址

// somefunction(char a){
void somefunction(char *a) {
  // scanf(" %c",&a);
  scanf(" %c", a);
}

int main() {
    char a = '\0';
    // somefunction(a);
    somefunction(&a);
    printf("<%c>\n", a);
    return 0;
}
//somefunction(char a){
void somefunction(char*a){
//scanf(“%c”和“&a”);
scanf(“%c”,a);
}
int main(){
字符a='\0';
//功能(a);
somefunction&a;
printf(“\n”,a);
返回0;
}
带有
scanf(“%c”和&a);
code将
a的地址提供给
scanf()
以便
scanf()
可以在该地址分配某些内容

somefunction();
执行同样的操作,为它指定一个地址

// somefunction(char a){
void somefunction(char *a) {
  // scanf(" %c",&a);
  scanf(" %c", a);
}

int main() {
    char a = '\0';
    // somefunction(a);
    somefunction(&a);
    printf("<%c>\n", a);
    return 0;
}
//somefunction(char a){
void somefunction(char*a){
//scanf(“%c”和“&a”);
scanf(“%c”,a);
}
int main(){
字符a='\0';
//功能(a);
somefunction&a;
printf(“\n”,a);
返回0;
}

C是按值传递的。函数无法更改调用方中的变量。如果希望函数更改值,则需要将变量的地址传递给函数。C是按值传递的。函数无法更改调用方中的变量。如果希望函数更改值,则需要将变量的地址传递给函数离子更改值。将
“%c”
中的前导空格删除到
“%c”
可能会给OP带来问题。您必须原谅我,能详细说明一下吗?将
“%c”
中的前导空格删除到
“%c”
可能会给OP带来问题。您必须原谅我,能详细说明一下吗?