>"*程序接收信号SIGSEGV,分段错误。
0x000000000040073b in concat (nextstr=0x7fffffffee66 "the",
longstr=0x7fffffffe750 ", i=0x0( at main.c:24
24 printf("%c -> %c", 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] = { ' ' };
int i = 0, j;
if (argc < 2)
{
printf("%s requires command-line argsn", argv[0]);
return 1;
}
for (j = 1; j <= argc; j++)
{
if (concat(argv[j], longstring, i))
return 1;
}
i--;
longstring[i] = ' '; //delete trailing space
printf("%sn", longstring);
}
int concat(char nextstr[], char longstr[], int *i)
{
int j = 0;
while (nextstr[j] != ' ')
{
printf("%c -> %cn", 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] = ' ';
(*i)++;
}
return 0;
}
指针错误最有可能
"这需要一个命令行参数来检查长度,但存在 seg 错误">
我认为错误在第 33 行 但我不知道如何解决它
导致崩溃的主要问题出在 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;
}