下面的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;
}
答案 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;