分段故障(核心转储)C程序

时间:2014-03-19 20:40:16

标签: c segmentation-fault

我正在尝试使用命令

运行此程序

./ box2 5

/*
 * box2.c
 *
 *  Created on: Mar 19, 2014
 *      Author: Ian
 */
 #include <stdio.h>
 void printchars(char c, int n);
 int main( int argc, char*argv)
 {
    int n = argv[1];
    printchars('*', n);
    return 0;
 }

 void printchars(char c, int n)
 {
    int x;
    for (x = n + 2 ; x > 0; x--)
    {

        if (x != 1 && x != n)
        {
            printf("%c", c);
            int count = n;
            while (count - 2 != 0)
            {
                printf(" ");
                 count--;
            }
        }
        else
        {
            int num = n;
            while (num != 0)
            {
                printf("%c", c);
                num--;
            }
        }
        printf("\n");
     }
 }

每次尝试时,我总是会收到错误Segmentation Fault(core dumped)。

    *****
    *   *
    *   *
    *   *
    *   *
    *   *
    *****

这就是我应该得到的。

我不知道如何解决这个问题。编译时没有错误,当我尝试运行程序时,错误是唯一出现的错误。

3 个答案:

答案 0 :(得分:2)

argv[1]char *。您需要将其转换为int。您可以通过调用atoi()执行此操作,如下所示:

int n = atoi(argv[1]);

请注意,这不会处理参数错误。另请注意,您对argv的定义是错误的:它应该是char * argv[]

答案 1 :(得分:0)

int main( int argc, char*argv)更改为int main( int argc, char**argv)

答案 2 :(得分:0)

这是错误的:

 int main( int argc, char*argv)

因为argv必须声明为ptr-to-ptr-to-char。同样,这:

 int n = argv[1];

无法正常工作。你需要像

这样的东西
 int main(int argc, char **argv)
 ...
 int n = atoi(argv[1]);