char型の自作関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
トト

char型の自作関数について

#1

投稿記事 by トト » 10年前

コード:

#include <stdio.h>

int test(char *,char *);

int main()
{
	char *str = "test";
	char str2[256];
	int i;

	i = test(str,str2);

	printf("%s (%d)byte",str2,i);

	return 0;
}

int test(char *s,char *buf)
{
	sprintf(buf,"文字列「%s」を受け取りました。",s);

	return strlen(buf);;
}
現在このようにint型の関数にし、文字列を処理したあと、結果のバイト数を返しています。
本来は
char test(char *s)
{
処理
return buf;
}
のように引数と戻り値に文字列を使いたいのですが、
この場合はどのように関数を作ればいいのですか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: char型の自作関数について

#2

投稿記事 by h2so5 » 10年前

C言語には文字列型はないので、文字列を戻り値で返すことはできません。

トト

Re: char型の自作関数について

#3

投稿記事 by トト » 10年前

h2so5 さんが書きました:C言語には文字列型はないので、文字列を戻り値で返すことはできません。
では、今のやり方しかないのですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: char型の自作関数について

#4

投稿記事 by みけCAT » 10年前

例えば、test関数内で領域をmallocなどで動的確保し、その領域へのポインタを返す、などでしょうか?
もう一度その関数を呼び出すと上書きされる可能性があることに気をつければ、static変数へのポインタでもいいでしょう。

ただし
トト さんが書きました:本来は
char test(char *s)
{
処理
return buf;
}
のように引数と戻り値に文字列を使いたいのですが、
この場合はどのように関数を作ればいいのですか?
というのは、「戻り値に文字列を使いたい」と言っているのに、
C言語のcharには文字列を格納できないので、矛盾しており、普通の方法では不可能です。
charを文字列を格納できる型(構造体など)にマクロ定義(typedefではなく#define)すればできるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

超初級者
記事: 56
登録日時: 10年前

Re: char型の自作関数について

#5

投稿記事 by 超初級者 » 10年前

やりたいのはこんなことですか?

コード:

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

char *test(char *s)
{
   static char buf[40];        // 大きさは、引数の文字列を十分格納できること
   int i;

   for (i = 0; i < strlen(s); i++) {
       buf[i] = s[strlen(s) - i - 1];
   }
   buf[i] = '\0';
   return buf;
}

int main(void)
{
   char s[] = "abcde";

   printf("%s\n", test(s));
   return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る