无法找到并修复我的seg错误错误

时间:2018-05-09 01:40:55

标签: c segmentation-fault

  

" *编程接收信号SIGSEGV,分段故障。
  concat中的0x000000000040073b(nextstr = 0x7fffffffee66"",
    在main.c上的longstr = 0x7fffffffe750"",i = 0x0):24
  24 printf("%c - >%c \ n",nextstr [j],longstr [* i]);
  (GDB)"

// define max for command line
#define MAX_CHARS 1000
#include <stdio.h>
int concat(char[], char[], int *);
void printreverse(char[], int);

int main(int argc, char *argv[])
{
    char longstring[MAX_CHARS] = { '\0' };
    int i = 0, j;

    if (argc < 2)
    {
        printf("%s requires command-line args\n", argv[0]);
        return 1;
    }

    for (j = 1; j <= argc; j++)
    {
        if (concat(argv[j], longstring, i))
            return 1;
    }

    i--;
    longstring[i] = '\0';    //delete trailing space
    printf("%s\n", longstring);
}

int concat(char nextstr[], char longstr[], int *i)
{
    int j = 0;

    while (nextstr[j] != '\0')
    {
        printf("%c -> %c\n", nextstr[j], longstr[*i]);
        longstr[*i] = nextstr[j];

        (*i)++;
        j++;

        if (*i > MAX_CHARS)
        {
            printf("Error: Input is too long!\n");
            return 1;
        }
    }

    if (j > 0)
    {
        if ((*i) + 2 > MAX_CHARS)
        {
            printf("Error: Input is too long!\n");
            return 1;
        }

        longstr[*i] = ' ';
        longstr[(*i) + 1] = '\0';
        (*i)++;
    }

    return 0;
}

指针错误很可能

  

&#34;这需要一个命令行参数检查长度,但是有一个seg错误&#34;

我认为错误在第33行 但我无法弄清楚如何解决它

1 个答案:

答案 0 :(得分:1)

造成崩溃的主要问题是你的for循环:

for(j = 1; j <= argc; j++){
    if(concat(argv[j], longstring, i)) return 1;
}

由于concat的第三个参数是int *,因此需要将指针传递给i。此外,您循环遍历循环次数太多次。如果argc为2,则程序名称在argv [0]中,您的参数在argv [1]中。所以,将循环更改为:

for(j = 1; j < argc; j++) {
    if (concat(argv[j], longstring, &i))
        return 1;
}