使用strcmp的段错误

| 我通过以下方式使用strcmp 传递char []数组名称 将指针传递给字符串文字 但是,第二个结果是段错误。即使我已经确认指针指向正确的字符串文字,但我仍然困惑为什么会出现段错误。 这是代码:-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char const *args[])
{
  char firstName[strlen(*++args)];
  strcpy(firstName, *args);
  char lastName[strlen(*++args)];
  strcpy(lastName, *args);
  printf(\"%s\\t%s\\n\", firstName, lastName);

  printf(\"%d\\n\", strcmp(firstName, lastName));// this works

  printf(\"%d\\n\", strcmp(*(--args),*(++args)));//this gives me a seg fault

  return EXIT_SUCCESS;
}
我将其保存为str.c并在编译时首先收到以下警告:
[Neutron@Discovery examples]$ gcc -Wall str.c -o str

str.c: In function ‘main’:
str.c:15: warning: operation on ‘args’ may be undefined
最终运行它,出现段错误,如下所示
[Neutron@Discovery examples]$ ./str Jimmy Neutron


Jimmy   Neutron

-4

Segmentation fault (core dumped)
    
已邀请:
        当您将相同的变量作为两个不同的参数两次传递给相同的函数时,请勿使用
--
++
。 代替ѭ5 做
char *first = *(--args);
char *second = *(++args);
printf(\"%d\\n\", strcmp(first,second));
仍然不是很可读(最好使用索引并对照ѭ7进行有效性检查),但是至少您不要更改该值并在同一序列点对其进行多次评估。     
        除了littleadv \的帖子所说的以外,您的缓冲区太短了一个字符(它没有为空终止符留任何空间)。因此,您的“ 8”会导致缓冲区溢出。     

要回复问题请先登录注册