次の方法で strcmp を使用しています
- char[] 配列名を渡す
文字列リテラルへのポインターを渡しますが、2 番目の結果はセグ フォールトになります。ポインターが正しい文字列リテラルを指していることを確認しましたが、なぜセグフォルトが発生するのか混乱しています。コードは次のとおりです。
#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)