掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24068

関数間の引数渡しについて
投稿者---がおぐらい(2005/11/10 15:14:13)


Cを始めたばかりで初心者的な質問ですいません。
引数の受け渡しで分からないことがあります。
例を簡単に書いてみます。
testという関数からtest2に0を送ります。
test2からはchar型のmsg(仮)をtestに返却したいです。
testからtest2にint型とchar型の変数を渡すのは分かるのですが、
渡す引数と貰う引数がある場合どういう記載になるのでしょうか?


int test(0)
{
printf("%s\n",msg)

}
int test2(int no)
{
char msg[10];
strcat(msg,"ABC");

}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:関数間の引数渡しについて 24070 RiSK 2005/11/10 15:33:12
<子記事> Re:関数間の引数渡しについて 24071 RAPT 2005/11/10 15:41:16


No.24070

Re:関数間の引数渡しについて
投稿者---RiSK(2005/11/10 15:33:12)


>渡す引数と貰う引数がある場合どういう記載になるのでしょうか?

return で返すか,ポインタを渡します。

>例を簡単に書いてみます。
>testという関数からtest2に0を送ります。
>test2からはchar型のmsg(仮)をtestに返却したいです。
>testからtest2にint型とchar型の変数を渡すのは分かるのですが、

#include <stdio.h>
#include <string.h>
char * test2(int n, char * msg, int size) {
    printf("n = %d\n", n);
    strncpy(msg, "ABC", size);
    return msg;
}
void test(void) {
    char msg[10];
    char * p = test2(0, msg, sizeof(msg));
    printf("p = %s\n", p);
    printf("msg = %s\n", msg);
}

int main(void) {
    test();
}

# Visual C++ 2005 Express Edition 快適ですよ♪


この投稿にコメントする

削除パスワード

No.24071

Re:関数間の引数渡しについて
投稿者---RAPT(2005/11/10 15:41:16)


引数が1つ、戻り値が1つなら、これでいいでしょう。
> testという関数からtest2に0を送ります。
void test(void)
{
    char msg = '\0';
    msg = test2( 0 );
    printf("msg: %c\n", msg);
}

> test2からはchar型のmsg(仮)をtestに返却したいです。
char test2(int no)
{
    char msg = 'a';
    return msg;
}


もしくは、ポインタ渡しで
> testという関数からtest2に0を送ります。
void test(void)
{
    char msg = '\0';
    test2( 0 , &msg );
    printf("msg: %c\n", msg);
}

> test2からはchar型のmsg(仮)をtestに返却したいです。
void test2(int no, char* msg)
{
    *msg = 'a';
}


文字を返したい場合は、次のようにします。
> testという関数からtest2に0を送ります。
void test(void)
{
    char[100] msg = {0};
    test2( 0 , msg, sizeof(msg) );
    printf("msg: %c\n", msg);
}

void test2(int no, char* msg, size_t num)
{
    strncpy(msg, "abc", num);
}



この投稿にコメントする

削除パスワード

No.24073

Re:関数間の引数渡しについて
投稿者---がおぐらい(2005/11/10 16:17:04)


下記のようにして試してみたのですが、できませんでした。
関数は両方ともint型で戻り値ありです。
またこの場合のプロトタイプ宣言って
int test2(int no,char*msg)でいいんですか?
たびたびすいません。

int test()
{

ret=test2(0,&msg);
printf("%s\n",msg)
}
int test2(int no,char*msg)
{
strcat(msg,"ABC");


return 0;
}


この投稿にコメントする

削除パスワード

No.24074

Re:関数間の引数渡しについて
投稿者---Blue(2005/11/10 16:20:08)


> msg
の変数宣言はどこにありますか?

それと、基本的なことですが、上の掲示板利用規則にもありますが
> ソースの添付は「HTML変換ツール」で字下げします。
を守ってください。
インデントが壊れてしまったソースでは見づらいですから。


この投稿にコメントする

削除パスワード

No.24075

Re:関数間の引数渡しについて
投稿者---がおぐらい(2005/11/10 16:26:05)


>> msg
>の変数宣言はどこにありますか?

不慣れなもんでソースみづらくてすいません。

それとmsgは書き忘れで実際は書いています。



この投稿にコメントする

削除パスワード

No.24076

Re:関数間の引数渡しについて
投稿者---とろり(2005/11/10 16:45:31)


こんにちは。

以下は参考になりますか?

#include <stdio.h>
#include <string.h>

void test(void);
int  test2(int, char*);

int main(void)
{
    test();
    return(0);
}

void test(void)
{
    int  ret;
    char msg[20];

    strcpy(msg, "");
    ret = test2(0, msg);
    printf("%s\n---\n", msg);

    strcpy(msg, "");
    ret = test2(1, msg);
    printf("%s\n---\n", msg);
}

int test2(int no, char* msg)
{
    switch (no) {
    case 0:
        strcat(msg, "ABC");
        break;
    case 1:
        strcat(msg, "DEF");
        break;
    default:
        return(-1);
    }
    return(0); 
}



この投稿にコメントする

削除パスワード

No.24077

Re:関数間の引数渡しについて
投稿者---Blue(2005/11/10 16:46:52)


>それとmsgは書き忘れで実際は書いています。
というかそれが重要なのですが?
まさが

char msg;

ではないですよね?
文字列を格納するのですから当然

char msg[ 20 ];

見たいに文字列にしなければいけませんよ。
あなたのコードを最大限につかいまして以下のように動いているように見える
ソースを載せておきます。
# つっこみどころはいっぱいあるということ。

#include <stdio.h> #include <string.h> /* test2 は test から使われているから、先に宣言しないといけない */ int test2( int no, char* msg ) { strcat( msg, "ABC" ); return 0; } int test() { int ret; char msg[ 20 ] = ""; ret = test2( 0, msg ); printf( "%s\n", msg ); return 0; } int main( void ) { int ret; ret = test(); return 0; }



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧