核心转储在C编程中

时间:2013-10-18 19:54:26

标签: c core coredump fault

我有一个家庭作业应该向用户询问一个数字并制作一个长度为他们所放的数字的正方形。如果用户输入5,那么程序需要制作一个5x5的正方形。

当我编译它时,我得到一个分段错误(核心转储)。我不知道问题出在哪里。你们能帮助我吗?我甚至尝试用纸和铅笔运行程序,看看我的输出是什么,对我来说似乎很好。

#include <stdio.h>

int main (){

int size, limit = 0;
char ch = 'A';
int rows = 1;

printf("Enter size:\n");
scanf("%d", size);

while (limit <= size){

    if (rows == 1 || rows == size){  /* This only works in first and last row */
       printf("%c", ch);
       limit++;
    }

    if (rows != 1 && rows != size){ /* This only works if row is not 1 and last row*/
       do{
            printf("%c", ch);
            limit++;

            do {
               printf(" ");
               limit++;
            } while (limit != size -1);

            limit++;

            if (limit == size){
               printf("%c", ch);
               rows++;
               limit = 0;
               printf("\n");
            }

       }while (rows != 1 && rows != size);  /* while not in first AND last row */

    }

4 个答案:

答案 0 :(得分:4)

int size, limit = 0;

...

scanf("%d", size);

启用编译警告,这是错误的。

答案 1 :(得分:2)

您正在将int传递给scanf,传递其地址

scanf("%d", &size);

答案 2 :(得分:1)

scanf("%d", size);

您将错误的参数传递给scanf。您传递的是一个整数,但您需要传递的是指向已分配存储的指针,其中提取的字符的解释存储在内存中。

为了实现这一点,请记住&(&符号),即地址运算符,是您在C中用来获取内存地址的内容。换句话说,您必须传递给scanf的是您要用来存储数据的变量的地址。

答案 3 :(得分:0)

scanf("%d", size);

&安培;在scanf语句中缺少

scanf("%d", &size);