使用函数将char中的null替换为letter?

时间:2019-01-31 23:17:43

标签: c function null

因此,我在使用函数替换用字符设置为null的char变量时遇到麻烦。在我的函数内部,可以更改该变量,但是在主函数中,该变量保持为空,因此我不确定自己在做什么。

我写的代码基本上就像

int main(){

    char a='\0';

    somefunction(a);
return 0;
}

具有功能

somefunction(char a){

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

因此,如果我输入B,则函数中的a值为B,但main中的a值仍为\ 0。

4 个答案:

答案 0 :(得分:1)

a仅在本地环境中被更改,因为您传递a的值并且它在本地被更改。

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

尝试类似

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

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

答案 1 :(得分:1)

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

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

void somefunction(char *a){
    *a = 'Q';
}

int main(){
    char a = '\0';
    somefunction(&a);
    printf("'%c'", a); /* Prints 'Q' */
}

请注意,在您的示例中,当您将指针传递给scanf时,已经完成了此操作。

答案 2 :(得分:1)

使用scanf(" %c",&a);代码将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;
}

答案 3 :(得分:0)

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

您需要使somefunction指向主a的副本的指针,然后将该指针直接传递到scanf

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

char a;
somefunction(&a);