gpt4 book ai didi

c - 二进制转换代码 段错误

转载 作者:行者123 更新时间:2023-11-30 19:46:23 24 4
gpt4 key购买 nike

我是 C 编程新手(才 2 周)。我无法弄清楚为什么我的代码会抛出段错误。如果我将 long int num 设置为等于静态数字,我就能使程序正常工作。但是,我需要程序能够接受来自命令行的用户输入(不是在程序运行后)

示例:./二进制7

应该输出7的二进制数是:111

我尝试过使用 strcpy(num, argv[0]) 但在编译时也会引发错误。

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

void decToBinary(long int num) // Function Definition
{
long int remainder[50];
int i=0;
int length=0;
printf("The binary number for %d is: ",num);
while(num > 0)
{
remainder[i]=num%2; // does the mod function
num=num/2; // Divides original number by 2
i++; // Increases count for the upcoming for-loop
length++; // Increases length display digits
}
for(i=length-1;i>=0;i--) // Prints out the binary number in order (ignoring the previous 0's)
{
printf("%ld",remainder[i]);
}
printf("\n"); // Adds a new line after the binary number (formatting)
}
//================================================================================================
int main(char argc, char* argv[])
{
long int num; //HOW DO I TAKE ARGV[0] AND MAKE IT A USEABLE VARIABLE???

printf("Enter the decimal number: "); //TEMPORARY until problem above is solved
scanf("%ld",&num); //TEMPORARY until problem above is solved

decToBinary(*num); // Calling decToBinary function
return 0; // Program terminated successfully
}

最佳答案

提示1:如果您想在decToBinary()函数中更改num的值,则必须在其中传递其地址。所以你应该这样调用它:

decToBinary(&num);

那么你的函数原型(prototype)将如下所示:

void decToBinary(long int *num)

所以你也必须正确修改函数的主体。我猜这就是导致段错误的原因。

<小时/>

提示2:argc代表参数计数,因此它的类型不是char而是int

<小时/>

正如@Kerrek SB在他的评论中指出的那样,scanf(3)是一个返回值类型为int的函数。检查返回值并处理可能发生的任何可能的错误被认为是明智的。

<小时/>

argv[0] 是可执行文件的名称。如果您想使用命令行中的第一个参数,它存储在 argv[1] 中,并且其类型为 char *。因此,如果您想将其用作数字,则可以使用 these 之一stdlib.h 的函数。

关于c - 二进制转换代码 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com