Jim*_*imm 10 c evaluation args strcmp sequence-points
我在以下方面使用strcmp
将指针传递给字符串文字,但第二个结果是seg错误.即使我已经确认指针指向正确的字符串文字,我很困惑为什么我得到seg错误..这是代码: -
#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;
}
Run Code Online (Sandbox Code Playgroud)我将它保存为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
Run Code Online (Sandbox Code Playgroud)
最后运行它,给出一个seg错误,如下所示
[Neutron@Discovery examples]$ ./str Jimmy Neutron
Jimmy Neutron
-4
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
lit*_*adv 14
当两个不同的参数将同一个变量传递给同一个函数时,请不要使用--和++.
代替 printf("%d\n", strcmp(*(--args),*(++args)));
做
char *first = *(--args);
char *second = *(++args);
printf("%d\n", strcmp(first,second));
Run Code Online (Sandbox Code Playgroud)
仍然不是真正可读(更好地使用索引和检查argc有效性),但至少你不改变值并在同一序列点多次评估它.