在函数中交换字符指针

时间:2018-06-14 04:50:49

标签: c

下面的C代码是一个无限循环。但是,如果我们将void hello()替换为main(),则效果非常好。

为什么这样以及如何解决?

#include <stdio.h>
void charSwap(char** a, char** b){
    char *c = *a;
         *a = *b;
         *b = c;
}
void hello(){
    char **a,**b;
    int i;
    printf("A = ");
    scanf("%c",&a);
    getchar();
    printf("B = ");
    scanf("%c",&b);
    getchar();
    if(a>b) charSwap(&a,&b);
    for (i=a;i<=b;i++)
    {
        printf("%c : %d , %X\n",i,i,i);
    }
}
int main(){
    hello();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您的代码中存在很多错误,会调用未定义的行为。 例如 -

scanf("%c",&a);

scanf期望char*作为%c的第二个参数。但是你传递的是char***

charSwap(&a,&b);的函数调用相同。您定义的函数需要char**。但是你再次传递char***

如果我正确理解您的代码,您只需要存储char,而不是真正需要char**

所以一个简单的解决方法是替换

char **a,**b;

char a, b;

这是一个working demo修复程序。

答案 1 :(得分:-1)

最后,我找到了我的解决方案来回答这个问题。 只需将SCNView的一颗星移至void charSwap(char** a)

即可
void hello(char* a)

}

void charSwap(char* a, char* b){ char *c = *a; *a = *b; *b = c; void hello()

char a,b;