C 使用函数将字符中的null替换为字母?
所以我很难用一个函数替换一个设置为null的char变量。在我的函数中,变量是可以更改的,但是在主函数中它保持为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仅在本地上下文中被更改,因为
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带来问题。您必须原谅我,能详细说明一下吗?