私は Linux で引数の sqrt を持つ C プログラムを作成しようとしています。コードは次のとおりです。
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main(char *argv[]){
float k;
printf("this is consumer\n");
k=(float)sqrt(atoi(argv[1]));
printf("%s\n",k);
return 0;
}
「shell>」プロンプトで入力すると、gcc は次のエラーを表示します。
Segmentation fault (core dumped)
ベストアンサー1
「セグメンテーション違反」とは、アクセス権のないメモリにアクセスしようとしたことを意味します。
最初の問題は、 の引数にありますmain
。関数は(または、同等に)main
である必要があり、にアクセスする前に少なくとも であることを確認する必要があります。int main(int argc, char *argv[])
int main(int argc, char **argv)
argc
2
argv[1]
float
また、をに渡すのでprintf
(ちなみに、double
を に渡すとに変換されますprintf
)、%f
書式指定子を使用する必要があります。書式指定子は文字列 (で終わる文字配列)%s
用です。'\0'