プロが教える店舗&オフィスのセキュリティ対策術

C言語 共用体について
コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1に渡したいんですが、float型もint型も、argv[1]の値しか受け取れないです。
どうしたら共用体に渡せるでしょうか?
大体コードは以下のように書いています。

>exe 1234 5678

typedef union tagUNI{
float f;
unsigned int ui;
int i;
char c;
}UNI,*LPUNI;

UNI u,u1;

void exe(int argc,char *argv[]){

if(argc==2){
~省略~
else if(argc==3){
 
}

A 回答 (4件)

>float型もint型も、argv[1]の値しか受け取れないです。


>どうしたら共用体に渡せるでしょうか?

「渡せる」というのが「代入する」という意味であれば、argv[1]の代わりにargv[2](どちらもchar *ですが)の参照先の値を解析して適当な型の数値に変換したものを、適当な型のメンバとして代入するだけです。

argv[1]でできているのであれば、argv[2]でも同じことですよ。exe()の中で「argv[1]」として参照しているものを「argv[2]」として参照すればいいだけ。
    • good
    • 0

肝心の u1 へ代入するところのコードはどうかいたの?

    • good
    • 0

#include <stdio.h>


#include <stdlib.h>

union sample {
 float f;
 unsigned int ui;
 int i;
 char c;
 char* s;
};

int main(int argc, char* argv[]) {
 union sample example;
 if (argc != 6) {
  goto END;
 }
 for (int i = 1; i < argc; i++) {
  switch(i) {
  case 1: example.f = strtof(argv[i], NULL);
   printf("%lf\n", example.f); break;
  case 2: example.ui = strtol(argv[i], NULL, 10);
   printf("%d\n", example.ui); break;
  case 3: example.i = strtol(argv[i], NULL, 10);
   printf("%d\n", example.i); break;
  case 4: example.c = argv[i][0];
   printf("%c\n", example.c); break;
  case 5: example.s = argv[i];
   printf("%s\n", example.s); break;
  }
 }

END:
 return EXIT_SUCCESS;
}
「C言語 共用体について コマンドライン引」の回答画像2
    • good
    • 0

「どうなってほしいのか」「現状どのようにしていてどのような障害が発生しているのか」がさっぱりわからない.



共用体じゃなくって「ふつうの」変数だったらできるのかな? あるいは, それさえもできない?
    • good
    • 0
この回答へのお礼

「どうなってほしいのか」
>値を2つ入力した時にargv[2]の値が共用体に渡されるようにしたいです。

お礼日時:2022/04/25 21:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!