C程序不打印

nis*_*ish -4 c function

我写了以下程序:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

void inttobusn(int val, int n, char* bus)
{
    int i;
    unsigned int digit;

    for (i=0; i < n; i++) {
            digit = pow(2, (n-1-i));
            if (digit <= val) {
                    val -= digit;
                    bus[i] = '1';
                    //printf("hello %c",bus[i]);
            } else {
                    bus[i] = '0';
            }       
     }
} 
main(){
  char* bus;
  inttobusn(37,8,bus);
  int i=0;
  //printf("%s",bus);
  for(i=0;i<12;i++){
      printf("%c",bus[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

但在运行时它不会打印数组的元素bus.它不打印任何东西.我无法弄清楚出了什么问题.有人可以指出吗?

Gri*_*han 6

你的代码有问题!您没有为bus[]数组分配内存,并且正在尝试访问垃圾位置的值,例如bus[i] = 0;- C标准中的未定义行为,未定义意味着您无法预测代码在运行时的行为方式.

编译此代码是因为语法方面的代码是正确的,但在运行时,操作系统将检测非法内存访问并终止您的代码.(有趣的是:因为OS检测到进程的内存权限违规 - 对有效内存的无效访问给出:SIGSEGV并且访问无效地址给出:SIGBUS).在最坏的情况下,您的程序可能看起来没有任何故障执行,产生垃圾结果.

要简单地纠正它,使用void*malloc(size_t size)动态定义bus数组,char bus[N];或者动态分配内存;

另外,来自@Lochemage和@Ran Eldan的建议:

您需要声明具有特定大小的总线,例如char bus[12].它必须至少足够大以适应12字符,因为你的for循环遍及那么多(你可以检查你的代码使用这个建议@codepade).

main()在你的代码中也没有返回类型,它应该是int main(void).