• ベストアンサー

自作関数について

j_euroの回答

  • j_euro
  • ベストアンサー率25% (29/115)
回答No.3

可能性としては、これもありかな? #include <stdio.h> void main( int argc, char *argv[] ) { int count; char b[20]; for( count = 0; count < argc; count++ ){ printf( " argv[%d] %s\n", count, argv[count] ); } b[0] = '\0'; printf("kopi mae=(%s)\n",b); copy(argv[1],b); printf("kopi ato=(%s)\n",b); return; } #1の方がいうように、質問の情報が足りませんよ~ん。 OSとコンパイラ、どんなことをやりたいのか、あと、あなたのレベル・経験もあればグー etc..

rewind
質問者

お礼

回答ありがとうございました。 開発環境は、Win98・Visual Studio6.0です。 Cは、独学で約2ケ月です。 本当は、もっと長いプログラムを書いてたのですが、 回答者に見やすい様に短いコードを載せてみました。 勉強の為に何通りかの方法で作成し無事完成です。

関連するQ&A

  • ライブラリ関数の説明

    プログラミングの言葉で説明しろといわれてなかなか出来なかったので質問させていただきます。 include <stdio.h> はstdio.hを開いて、その内容はmain関数やprintf関数のプロトタイプ宣言がされている。 printf(”%d”,a) は引数に”%d”とaを渡してどのような処理がされているのでしょうか。 scanf(”%d”,&a) は引数に”%d”と変数のアドレスを渡している。 この引数に”%d”を書くことは何を渡しているのでしょうか。 また、printf(”abcdef”)と書いた場合printf関数にはabcdefの先頭アドレスが渡されていると考えていいのでしょうか。

  • 文字列のコピー

    C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。

  • プログラミング(関数reverseを作る)

    プログラミングの勉強会で文字列を反転させる関数(例:ABCDE→EDCBA)を作れという課題が出たのですが、以下のように書いたきり進みません。あと、何を書けばいいのでしょうか?教えてください。 #include <stdio.h> void reverse(char *); void reverse2(char *); void main(){ char buf[10]; printf("str :"); fgets(buf, 10, stdin); reverse(buf); printf("rev :%s", buf); return; } //文字列を反転させる関数 void reverse(char *s){ return; }

  • 関数の型

    C言語の勉強をしております。 以下のように、入力用の関数を作成し、入力された文字列を返して欲しいんですが、「1 番目の引数を 'char *[80]' から 'char *' に変換できません。」という警告メッセージが出てしまい、解決出来ません・・・。 原因と解決策を教えていただけないでしょうか? ちなみに環境はWindowsXP、コンパイラはVC6.0です。 #include <stdio.h> char *insertName(char *buf); int main(void) { char *buf[80]; buf = insertName(buf); printf(buf); return 1; } char *insertName(char *buf) { gets(buf); return buf; } mainの「buf」の定義を「char *buf」にすればエラーは出ないんですが、大きさを指定したいので・・・ どうかよろしくお願いいたします。

  • 指定した文字列を探して・・・

        第1引数の文字列中に第2引数で指定した文字がある場合に、その     文字のあるアドレス(ポインタ)を返す関数doko()作成し、     プログラムを完成させよ。     指定した文字がない場合はNULL(ヌルポインタ)を返すものとする。     配列の[](カギカッコ)を利用しないで作る事     main内は変えないこと いろいろと模索したのですが、strcpyなどは使うのでしょうか? 参考サイトを見たりしたり、ほかの質問などを見たのですが なかなか理解できずに現在にいたってます 以下のコードのdokoは沢山やりすぎたので一番シンプルな間違い方をしています 何かご指摘あればお願いします #include <stdio.h> #define MAX 128 char* doko(char *,char); int main() { char buf[MAX]; char *p = "abcdef12345"; char *r; r = doko(p, 'f'); if (r == NULL) { printf("mojiretsu ni f toiu moji ha arimasen\n"); return 0; } printf("%s (= f12345)\n", r); scanf("%s", buf); r = doko(buf, 'x'); if (r == NULL) { printf("mojiretsu ni x toiu moji ha arimasen\n"); return 0; } printf("%s\n", r); return 0; } char* doko(char *p,char a) { while(*p){ if(*p == a){ return p; } if(*p != a){ return NULL; } ++p; } }

  • 自作の関数を見てください。

    私が作った関数がこれでいけるか気になったので、 評価してください。 内容は、決められた文字が入力されるまでループを繰り返すというものです。 評価して欲しい内容・・・ 1.関数名や変数名 2.strchrの使い方 3.その他だめなとこがあったらすべて お願いします。 ソース(わかりやすいようにmain関数もつけます): #include<stdio.h> #include<string.h> #include<stdarg.h> char Input_True_char(char *str,char *format,...); int main(void) { char mozi; mozi = Input_True_char("ny","あなたは%d才以上ですか?(y/n)\n",18); if(mozi == 'y') { printf("18才以上です\n"); } else if(mozi == 'n') { printf("18才未満です\n"); } else { printf("バグ\n"); } return 0; } char Input_True_char(char *str,char *format,...) { char mozi[3]; va_list args; va_start(args,format); do{ vfprintf(stdout,format,args); rewind(stdin); fgets(mozi,sizeof(mozi),stdin); }while(mozi[1] != '\n' || strchr(str,mozi[0]) == NULL); va_end(args); return mozi[0]; }

  • プログラミング 関数

    逆順する関数reverseを作成したいんです。 以下のは関数reverseを利用したmainのプログラムです。 #include <stdio.h> void reverse(char str1[],char str2[]); int main (void) { char strin[255]="abcdefg"; char strout[255]; reverse(strin, strout); printf(" input=%s\n",strin); printf("output=%s\n",strout); return 0; } 教えてください。

  • 参照渡しにならないのは何故?

    参照渡しにならないのは何故? 基本的な質問で大変恐縮なのですが、C言語で以下のコードを書いてみました。 メインの関数ではchar型のポインタのみ用意し、呼び出し先のtest関数内で当該ポインタ用に 領域を割り当て文字列をコピーしています。 ここまでは良いのですが、呼び出し元のメイン関数に戻るとtest関数にて設定したはずの値 が消えてしまいます。 結局のところ、メインの関数で用意したchar型のポインタがうまくtest関数にわたっていない (?)ような動作なのですが、どうしてこうなってしまうのか理解できず苦しんでいます。 ご教授いただければ幸いです。 #include <stdio.h> #include <stdlib.h> #include <string.h> void test(char *pc_buf){ pc_buf = (char *)malloc(10); memset(pc_buf,(int)NULL,10); strcpy(pc_buf,"12345"); return; } void main(){ char *pc_buf; pc_buf = NULL; test(pc_buf); printf("[%s]\n",pc_buf);getchar(); }

  • malloc関数(strtok関数の自作版)につきまして分からないこと

    malloc関数(strtok関数の自作版)につきまして分からないことがあります。 以下のプログラムにmallo関数がフリーする最適な位置を明示しなさいといわれました。 文字が分離した時にfreeすると助言されたのですが いまいち理解できません・・・。 条件式の中で使用するともいわれていました。(おそらくif文・・・。) 色んな意見を参考にしたいので詳しい方助言のほうよろしくおねがいします。 なおプログラムはほかの箇所を変更したり、他の場所でもmalloc関数を使用することが認められています。 またfreeする場所はメイン関数ではなくあくまでもstrtok関数の中で宣言するようです。 よろしくお願いします。 #include <string.h> #include <stdio.h> #include <stdlib.h> main(){ char* s2 = ",/"; char* result; char* r1; char* r2; char* r3; char* r4; result = strtok("//123//,45/,678,9/","/,"); r1 = strtok(NULL, s2); r2 = strtok(NULL, s2); r3 = strtok(NULL, s2); r4 = strtok(NULL, s2); printf("%s\n",result); printf("%s\n",r1); printf("%s\n",r2); printf("%s\n",r3); printf("%s\n",r4); return; } char *strtok(char *s1, const char *s2) { int i,len; char *str1, *str2 , *str3; static char *tok ; static char* mstr; if(s1 != NULL) { str1 = s1; } else { str1 = tok; } str2 = str1 + strspn(str1, s2); /* strspnを利用 */ if (*str2 == '\0') { return (NULL); } len = 1; i = 0; while(*(str2 + i) != '\0'){ len++; i++; } mstr = (char*)malloc(sizeof(char)*len); if(mstr == (NULL)) { return 0; } i = 0; while(*(str2 + i) != '\0'){ *(mstr + i) = *(str2 + i ); i++; } *(mstr + i ) = '\0'; str3 = mstr + strcspn(mstr, s2); /* strcspnを利用 */ if (*str3 != '\0'){ *str3 = '\0'; str3 = str3 + 1; } tok = str3; return (mstr); }

  • 二次関数で

    任意の二次方程式(ax^2+bx+c=0)を解くプログラムを作るのですが、以下の条件を満たした方法で作るというものです。 1、関数の引数は、3つの係数と、解の入る変数二つとする。 (計5つの引数をとる。) いずれかの引数がアドレス渡し(ポインタ)になる。 2、解は関数呼出の時に指定した2つの変数にそれぞれ代入されること。 3、解の表示は関数側ではなく呼出側で行うこと。 4、グローバル変数は使用しない。 一応作ってみたのですがコンパイルすらできません。 初心者なので全くわかりません教えてください。 #include<stdio.h> #include<math.h> void solve(double *x, double *y); int main(void) { double x,y; solve(&x,&y); return 0; printf("x=%f\n", x); printf("y=%f\n", y); } void solve(double *x, double *y) { doble a,b,c; puts("二次方程式 a*x^2+b*x+c=0 を解きます"); puts("係数a, b, cを入力してください"); printf("a="), scanf("%lf", a); printf("b="), scanf("%lf", b); printf("c="), scanf("%lf", c); putchar('\n'); double d = b * b - 4 * a * c; if(d >= 0){ x = (-b + sqrt(d)) / (2 * a); y = (-b - sqrt(d)) / (2 * a); } else puts("虚数解"); }