C.传递要修改的指针导致段错误
我正在C中为一个类制作一个十进制的二进制转换器。 我想通过一个字符数组到我的函数以及作为int的小数。 即无效DtoB(int十进制,字符*数组); DtoB将执行数学运算并将数组修改为二进制值。 理想的是通过给它int值。 Main()将只扫描f(十进制),DtoB(十进制,数组)和printf(数组)。
这是我的。 这只是返回一个分段错误
1 #include <stdio.h>
2 #include <math.h>
3
4 void DecToBin(unsigned int, char *binary);
5
6 int main()
7 {
8 unsigned int dec;
9 char *binary[];
10 while(1) {
11 scanf("%d", &dec);
12 DecToBin(dec,*binary);
13 printf("In binary is ");
14 printf("%sn",binary);
15 }
16 }
17 void DecToBin(unsigned int dec, char *binary)
18 {
19 int counter=0;
20 while(dec) {
21 binary[counter]=dec%2;
22 dec/=2;
23 counter++;
24 }
25 }
我希望这样做,因为这似乎是能够做到32位整数的最佳方式,同时保持阵列的最小尺寸。 对不起,如果我杀了格式。 任何帮助表示赞赏。
char *binary[33]
二进制是指针数组。 所以它中的每个元素都是一个指针。
分段错误是因为你没有初始化数组并试图使用它。
您正在取消引用不指向任何有效内存位置的指针。
在使用它们之前,您需要分配内存给数组的成员
包含所有评论,包含错误检查等,发布的代码变为:
#include <stdio.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <string.h> // memset()
// prototypes
void DecToBin(unsigned int, char *binary);
int main()
{
unsigned int dec;
char binary[sizeof(int)*8 +1];
while(1)
{
if( 1 != scanf("%u", &dec) )
{ // then scanf failed
perror( "scanf for decimal value failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
DecToBin(dec, binary);
printf("In binary is ");
printf("%sn",binary);
}
}
void DecToBin(unsigned int dec, char *binary)
{
size_t counter= sizeof(int)*8;
memset( binary, ' ', counter );
binary[ counter ] = ' '; // terminate string
counter--;
// do...while allows for dec being 0
do
{
binary[counter]= (char)((dec%2)+ 0x30);
dec /= 2;
counter--;
} while(dec);
}
这仍然存在用户留下空白屏幕和闪烁光标的缺点。 IE代码应通过请求输入值提示用户。
链接地址: http://www.djcxy.com/p/72153.html上一篇: C. Passing pointers to be modified causing segmentation faults