我写了以下程序:
#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.它不打印任何东西.我无法弄清楚出了什么问题.有人可以指出吗?
你的代码有问题!您没有为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).