[英]How To Fix Segmentation Fault 11 in a C program?
我是 C 编程的新手。 我正在编写一个将整数转换为十六进制的函数。
出于某种原因,我遇到了分段错误 11。请指教。 谢谢!
这是我的函数的代码:
void printHexadecimalForm( int X )
//Purpose: Print parameter X in hexadecimal form
//Output: Hexadecimal representation of X directly printed
//Assumption: X is non-negative (i.e. >= 0)
{
//[TODO] CHANGE this to your solution.
int input = X;
int output[32];
int i = 0;
while(input != 0){
if(input%2 != 0){
input = input - 1;
input /= 2;
output[i] = 1;
i++;
}
else{
input /= 2;
output[i] = 0;
i++;
}
}
while(i % 4 != 0){
output[i + 1] = 0;
i++;
}
for (int j = 0; j < i/2; j++)
{
int temp = output[j];
output[j] = output[i - 1 - j];
output[i - 1 - j] = temp;
}
int c, k = 0;
for(int z = 0; z < i; z += 4; ){
for (c = z; c < c + 4; c++){
k = 10 * k + output[c];
}
if(k == 0000){
printf("%d",0);
}
if(k == 0001){
printf("%d",1);
}
if(k == 0010){
printf("%d",2);
}
if(k == 0011){
printf("%d",3);
}
if(k == 0100){
printf("%d",4);
}
if(k == 0101){
printf("%d",5);
}
if(k == 0110){
printf("%d",6);
}
if(k == 0111){
printf("%d",7);
}
if(k == 1000){
printf("%d",8);
}
if(k == 1001){
printf("%d",9);
}
if(k == 1010){
printf("%c", 'A');
}
if(k == 1011){
printf("%c", 'B');
}
if(k == 1100){
printf("%c", 'C');
}
if(k == 1101){
printf("%c", 'D');
}
if(k == 1110){
printf("%c", 'E');
}
if(k == 1111){
printf("%c", 'F');
}
}
}
我建议你深呼吸,重新开始。 首先记住,没有必要将任何东西转换成二进制。 一切都已经是二进制的了。
也许这个检索两个十六进制字符的小块可以帮助您进入轨道:(这只是一种方法)
int n = 165; // this is the number we want to display in hex (165 is 0xa5)
int i, hexChar;
i = n & 0xF; // bitwise AND with 00...001111
if(i < 10) // look up to ASCII table for more info
hexChar = i + 48; // character '0' is code 48, '1' is 49 etc.
else
hexChar = i + 55; // character 'A' is code 65, 'B' is 66 etc.
printf("Rigth most hex: %c\n", hexChar);
i = n >> 4; // shift all bits 4 steps to the right
i = i & 0xF; // bitwise AND with 00...001111
if(i < 10) // look up to ASCII table for more info
hexChar = i + 48; // character '0' is code 48, '1' is 49 etc.
else
hexChar = i + 55; // character 'A' is code 65, 'B' is 66 etc.
printf("Second hex: %c\n", hexChar);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.