プロが教える店舗&オフィスのセキュリティ対策術

sprintfを使って、str1とstr2を連結させてstr3に代入したいです。
実行結果は、
文字列 1 : abcd
文字列 2 : efgh
連結結果: abcdefgh という風にしたいです。
<コード>
#include <stdio.h>
#include <stdlib.h>
char *concut(char *str1, char *str2){
char **str3;
str3=malloc(sizeof(char *)*256);
sprintf(str3,str1,str2);
}

int main(void){
char str1[256]="abcd";
char str2[256]="efgh";
char *str3;

str3=concut(str1, str2);
printf("文字列1 :%s \n",str1);
printf("文字列2 :%s \n",str2);
printf("連結結果:%s \n",str3);
free(str3);
return 0;
}

私自身、sprintfの使い方やポインタの使い方に自信が無いのでぜひ教えてください。

gooドクター

A 回答 (4件)

#include <stdio.h>


#include <stdlib.h>

/* 「連結」の英単語は **concatenate** */
char *concat(char *str1, char *str2){
 char *str3 = malloc(sizeof(char*) * 256);
 /* sprintf の第二引数は出力フォーマット */
 sprintf(str3, "%s%s", str1, str2);
 /* char* を返す */
 return str3;
}

int main(void){
 char str1[256]="abcd";
 char str2[256]="efgh";
 char *str3 = concat(str1, str2);
 printf("文字列1 :%s \n",str1);
 printf("文字列2 :%s \n",str2);
 printf("連結結果 :%s \n",str3);
 free(str3);
 return EXIT_SUCCESS;
}
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。

お礼日時:2021/06/27 11:12

たとえば


char *concat(const char *str1, const char *str2)
{
char *buf = NULL;
int size = snprintf(NULL, 0, "%s%s", str1, str2);
if (size >= 0 && (buf = malloc(size+1))) {
sprintf(buf, "%s%s", str1, str2);
}
return buf;
}
なんてこともできるけど.... やりすぎ?
    • good
    • 0

>sprintfの使い方やポインタの使い方に自信が無いので


関数sprintfの定義は、

  int sprintf(char *s, const char *format, ...);

ですので、2つ目のパラメタは書式ですよ。
つまり、今回の「str1とstr2を連結させてstr3に代入したい」ならば、

  sprintf(str3, "%s%s", str1, str2);

ですね。

https://www.k-cube.co.jp/wakaba/server/func/spri …
    • good
    • 0

単純に 2つの文字列を連結するだけなら strcat の方が普通だと思うなぁ. まあ sprintf も「ありえない選択肢」ではないけど.



spintf は「出力先が違う」だけで使い方はほぼ printf と同じ. だから「printf が使えるなら sprintf も使える」はずではあるんだけど.... プログラムの
sprintf(str3,str1,str2);

printf(str1,str2);
だったらどのような出力がなされるかわかりますか?

あと「ポインタの使い方」以前の問題として concut (ってなんだ) が何も返さないのはなぜ?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング