課題で下の問題が出たんですが、どうしてもわからないので教えてください。
(1) 十分な大きさの文字配列1つと, 文字列または文字配列2つを指すポインタの計3つをこの順に引数に取り, 前者の文字配列内に後2者の文字列を順に結合して格納する関数str2cpy を定義しなさい.関数内で標準の文字列処理関数を使用すること.
実行時,最初の文字配列の内容は上書きしてよい. 戻り値は最初の文字配列を指すアドレスになるようにせよ.
ヒント: この関数のプロトタイプ宣言は次のように書ける.
char *str2cpy(char *dest, const char *s1, const char *s2);
注意: 確認のためmain関数からこの関数を呼び出す際は, 第一引数の配列は出来上がる文字列を格納できる大きさにしておくこと.
(2) 十分な大きさの文字配列1つと, 文字列または文字配列2つを指すポインタの計3つの引数をこの順に取り, 後2者の文字列を最初の文字配列の内容の後に順にアペンドする関数 str2catを定義しなさい. この関数は第一引数の文字配列が空の場合はLEVEL2と同じ結果となるが, 空でない場合は文字列の後に第二,第三引数の内容が連結される.
ヒント: この関数のプロトタイプ宣言は次の通り.
char *str2cat(char *dest, const char *s1, const char *s2);
string関数を教えてください。
Re: string関数を教えてください。
具体的にどこまで出来ていてどこがわからないんでしょうか?
全部わからないはなしで。
出来ているところまでのコードは載せられますか?
全部わからないはなしで。
出来ているところまでのコードは載せられますか?
おそらく、string.h の strcpy と strcat でいいのかな?wakaba さんが書きました:関数内で標準の文字列処理関数を使用すること.
Re: string関数を教えてください。
#include<stdio.h>
#include<string.h>
int main(void)
{
char dest[100]="abc";
char s1[]="def";
char s2[]="ghi";
strcpy(dest,s1);
strcpy(dest+strlen(dest),s2);
printf("%s\n",dest);
return 0;
}
(1)で期待する結果は出たんですけど、 戻り値は最初の文字配列を指すアドレスというところからいまいちわかっていません。
#include<string.h>
int main(void)
{
char dest[100]="abc";
char s1[]="def";
char s2[]="ghi";
strcpy(dest,s1);
strcpy(dest+strlen(dest),s2);
printf("%s\n",dest);
return 0;
}
(1)で期待する結果は出たんですけど、 戻り値は最初の文字配列を指すアドレスというところからいまいちわかっていません。
Re: string関数を教えてください。
ここはstrlenとstrcpyを使わなくてもstrcatでも可能ですね。 まずはmain関数と別にstr2cpy関数を作りましょう。mainからはその関数を呼ぶようにする。wakaba さんが書きました: strcpy(dest+strlen(dest),s2);
つまり
int main()
{
char dest[100]="abc";
char s1[]="def";
char s2[]="ghi";
str2cpy(dest,s1,s2);
printf("%s\n",dest);
return 0;
}
char *str2cpy(char *dest, const char *s1, const char *s2)
{
strcpy(dest,s1);
strcat(dest,s2);
retunr ???;
}
???の部分は
ということなので、 となりますね。戻り値は最初の文字配列を指すアドレス
Re: string関数を教えてください。
(1)の内容は理解できました。(1)を参考に(2)を次にやろうとして下のプログラミングを書きました。しかし期待どおりの実行結果がでませんでした。
何が間違ってるのかよろしければ教えてください。
#include<stdio.h>
#include<string.h>
char *str2cpy(char *dest, const char *s1, const char *s2)
{
strcpy(dest,s1);
strcat(dest,s2);
return dest;
}
char *str2cat(char *dest, const char *s1, const char *s2)
{
strcat(dest,s1);
strcat(dest,s2);
return dest;
}
int main(void)
{
char id[]="140-T3823";
char dest[100]="abc";
char s1[]="def";
char s2[]="ghi";
int x;
int y;
x=str2cpy(dest,s1,s2);
printf("%s\n",id);
printf("%s\n",x);
y=str2cat(dest,s1,s2);
printf("%s\n",y);
return 0;
}
何が間違ってるのかよろしければ教えてください。
#include<stdio.h>
#include<string.h>
char *str2cpy(char *dest, const char *s1, const char *s2)
{
strcpy(dest,s1);
strcat(dest,s2);
return dest;
}
char *str2cat(char *dest, const char *s1, const char *s2)
{
strcat(dest,s1);
strcat(dest,s2);
return dest;
}
int main(void)
{
char id[]="140-T3823";
char dest[100]="abc";
char s1[]="def";
char s2[]="ghi";
int x;
int y;
x=str2cpy(dest,s1,s2);
printf("%s\n",id);
printf("%s\n",x);
y=str2cat(dest,s1,s2);
printf("%s\n",y);
return 0;
}