質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

6822閲覧

C言語のコマンドライン引数の関数を使った値の受け渡しについて

panda_man

総合スコア20

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/08/05 18:35

コマンドライン引数もそうなんですが、ポインタの値の受け渡しがよく分かっていないのだと思います。
プログラムは引数として入力した値から、最大値を出力するプログラムです。
コマンドライン引数はchar型になってしまうので、intにするためにatoi()を使っています。
saidai()の&data[i]にするとエラーは起きないのですが、アドレスをint型のmaxに渡すことになるのでやっぱりうまく動きません。
maxをポインタ型にすることもやってみましたが、うまくいきませんでした。
できる限り詳しく原因と解決方法をおしえてくださいm(_ _)m

#include<stdio.h>
#include<stdlib.h>

void saidai(int max,char* data,int n){
max=0;
int i;
for(i=1;i<n;i++){
if( atoi( &data[i])>max )max=atoi(&data[i]);
}
}

int main(int argc,char* argv[]){ int max=0; int i; for(i=1;i<argc;i++){ printf("入力値%d=%s\n",i,argv[i]); } saidai(max,*argv,argc); printf("最大値=%d\n",max); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rubato6809

2018/08/06 01:02

gccをお使いだと思うけど、ポインタのサイズは何バイトですか? printf("%ld\n", sizeof(char *)); が何を表示するか確かめてください。
guest

回答2

0

ベストアンサー

まず、

saidai(max,*argv,argc);

max を引数にしてますが、これだと値を返せません。引数は基本的に値を渡すものです
値を返すには、返り値にしましょう

max = saidai(argv,argc);

また、*argv だとまずいです(argv[0]を指してしまう)
そして、
saidai関数は返り値を返すようにして、引数はmainのそれと同じにしとけば、同じように扱えます

int saidai(char* data[],int n){

... return max;

}

#結局別回答と全くおなじになってしまっている

投稿2018/08/05 22:28

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2018/08/06 01:57

ありがとうございます。細かい事を書く事が出来ずに気になっていたのですが^_^
panda_man

2018/08/07 17:26

ありがとうございます。てっきり、関数の値の受け渡しはreturnがなくてもできると思い込んでいました。 返信遅れてすいません。ありがとうございました。
guest

0

こんなの?

c

1usr~/test/c % cat ct0.c 2#include <stdio.h> 3#include <stdlib.h> 4// 5int saidai(char *data[],int n) 6{ 7 int max= 0; 8 int a= 0; 9 for(int i= 1; i < n ; i++ ){ 10 a= atoi(data[i]); 11 if( max < a ){ 12 max= a; 13 } 14 } 15 return max; 16} 17 18int main(int argc, char *argv[]) 19{ 20 if( argc < 2 ){ 21 return 1; 22 } 23 // 24 for(int i= 1; i < argc ; i++ ){ 25 puts(argv[i]); 26 } 27 // 28 int max= saidai(argv,argc); 29 // 30 printf("最大値=%d\n",max); 31 // 32 return 0; 33} 34 35usr~/test/c % 36usr~/test/c % ./a.out 11 21 31 41 5 12 31 3711 3821 3931 4041 415 4212 4331 44最大値=41 45

投稿2018/08/05 20:32

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問