“程序接收信号SIGSEGV,分段错误 . 在concat中的0x000000000040073b(nextstr = 0x7fffffffee66”the“,longstr = 0x7fffffffe750”,i = 0x0)在main.c: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;
}
极有可能出现指针错误
“这需要一个命令行参数检查长度但是有一个seg错误”
我认为错误是在第33行,但我无法弄清楚如何解决它
1 回答
导致崩溃的主要问题是你的for循环:
由于concat的第三个参数是int *,因此需要将指针传递给i . 此外,您循环遍历循环次数太多次 . 如果argc为2,则程序名称在argv [0]中,您的参数在argv [1]中 . 所以,将循环更改为: