gpt4 book ai didi

C - 段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 16:57:24 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 C 程序,它接受一个数字的输入并返回该数字的数字之和以及该数字的倒数。该程序目前还不完整,因为我在测试它时不断遇到 Segmentation Failure 错误。

这是代码:

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

int sumdigits(int);

int main() {
int num; // The number to be read
int reverse; // The reverse of the input
int sum; // The sum of the digits


printf("Enter a number: ");
scanf("%d", &num);
sum = sumdigits(num);
printf("Sum of digits: %s", sum);
}

int sumdigits(int number) {
int sum = 0;
int temp = number;
while (temp != 0) {
sum += (temp % 10);
temp /= 10;
}
return sum;
}

通过使用一些打印语句,我发现错误最有可能发生在这些行中的某处:

printf("Enter a number: ");
scanf("%d", &num);

我可以输入一个数字,但之后我立即收到一条消息,指出“段错误(核心已转储)”,并且程序退出。使用 sudo 权限运行程序只会提供段错误,而不会出现消息的“核心转储”部分。

按照说明提供的调试信息here似乎表明 printf 语句是导致错误的原因,因为这是输出:

(gdb) run
Starting program: /home/sschmalz/Documents/Classes/CIS308/proj1/debug
Enter a number: 123

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a62fb4 in vfprintf () from /lib64/libc.so.6

但是,我不知道如何处理这些信息,因此无法解决该错误。

我向我的教授寻求帮助,以解决实验室中的同样错误,但他无法找到解决方案。现在两个不同的实验室都发生了这种情况,再加上这个项目,这让我认为这可能与我的计算机设置有关,而不是与代码本身有关。

我正在使用 vim 编写程序并使用 gcc 编译。在大多数情况下,我不会重命名编译器的输出,因此我使用“./a.out”运行它,我使用 Fedora 24 来编写和运行这些程序。如果需要有关我的系统的任何其他信息,请告诉我。

最佳答案

改变

printf("Sum of digits: %s", sum);

printf("Sum of digits: %d", sum);

%s 适用于字符串,不适用于整数(%d 适用于有符号整数)。

参见http://www.cplusplus.com/reference/cstdio/printf/

关于C - 段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39547130/

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