我想寫一個簡單的C程序,它接受一個數字的輸入並返回數字的總和以及數字的反向。該程序目前不完整,因爲我在測試時遇到了分段錯誤錯誤。C - 分段錯誤(核心轉儲)
下面是代碼:
#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);
我能夠進入數字,但在此之後,我收到一條消息,說Segmentation Fault(核心轉儲)並退出程序。使用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來編寫和運行這些程序。如果需要關於我的系統的其他信息,請告訴我。
傳遞一個'int'到'的printf()'用'%s'轉換不確定的行爲。 – EOF
我的計算機上的編譯器出於某種原因沒有收到字符串格式錯誤。我把這個文件上傳到我大學的Linux服務器上,並在那裏編譯,這給了我例外和修復。謝謝大家的幫助,對於這樣一個小問題,我覺得自己像個白癡。 –