C言語関係掲示板

過去ログ

No630 関数から文字列や複数の変数をかえす方法

[戻る] [ホームページ]
No.6542

関数から文字列や複数の変数をかえす方法
投稿者---むん(2003/05/19 10:21:05)


char toridasi(char *PATH, int Kaisi)
{

char bubun[256];
char *sp, *bp;
int i;

sp=PATH;
bp=bubun;

i=0;
while (*sp!='\0')
{
i++;
if(i>=Kaisi && *sp!='\0'){
*bp=*sp;
bp++;
}
sp++;
}
*bp='\0';

printf("mojiretu -> %s\n", PATH);
printf("mojisu -> %d\n", i);
printf("bubun -> %s\n", bubun);

return bubun;
}

題名のとおりなのですが、上のプログラムでbubunという文字列を
返したいのですが、うまく返せません。

かえったとしても一文字しかかえせません。
また、複数変数を返したい場合も気になるので
教えていただけませんでしょうか。
よろしくお願いいたします。

No.6544

Re:関数から文字列や複数の変数をかえす方法
投稿者---水也(2003/05/19 10:57:21)


1文字しか返さないというのは、関数の返り値の型を
char* ではなく char にしてしまっているからですね。
そこを直せばうまく行くと思います。
ただ、ローカル変数で作った文字配列のアドレスを返して
関数の外で使うのはあまり良くないと思うので、
↓のようにするほうが見た目もすっきりするしいいの
ではないかと思います。
ところで、複数変数を返すというのは、文字数も返したい
とか、そういうことですか?

char* toridasi(char *PATH, int Kaisi){

char *sp ;
int i;

sp=PATH;

i=0;
while ( i + 1 < Kaisi && *sp!='\0'){
i++;
sp++;
}

printf("mojiretu -> %s\n", PATH);
printf("mojisu -> %d\n", i);
printf("bubun -> %s\n", sp );

return sp;
}

No.6546

Re:関数から文字列や複数の変数をかえす方法
投稿者---かずま(2003/05/19 11:01:39)


値を返してもらう領域を呼び出し元で用意し、それらへのポインタを関数に
渡すことによって、呼び出された関数では、そのポインタの指す領域に値を
入れることができます。文字列も返せるし、複数の値も返せます。
#include <stdio.h>
#include <string.h>

void toridasi(char *path, int kaisi, int *len, char *bubun)
{
    *len = strlen(path);
    strcpy(bubun, path + (kaisi - 1));
}

int main(void)
{
    char path[] = "abcdefg";
    int len;
    char bubun[100];

    toridasi(path, 4, &len, bubun);
    printf("mojiretu -> %s\n", path);
    printf("mojisu -> %d\n", len);
    printf("bubun -> %s\n", bubun);

    return 0;
}

ソースを投稿するときは「掲示板ご利用上の注意」をよく読んで
それに従ってください。

No.6547

Re:関数から文字列や複数の変数をかえす方法
投稿者---むん(2003/05/19 11:35:18)


(゚▽゚)b!
なるほど、わかりました。
水也さま、かずまさま、ありがとうございました。