アプリ版:「スタンプのみでお礼する」機能のリリースについて

コメントアウトしたところと、標準入力から文字列を2つ読み取り、作成したcreate_word_pair関数を用いて、新たにそれらのデータが代入された構造体を作成し、これらのメンバ変数をすべて標準出力に表示するプログラムを作りたいのですが、教えてください。

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

word_pair_t create_word_pair(char *a,char *b)

strcmp(a,b);

if(strcmp(a,b)==0) //2つの文字が同じ場合はエラーメッセージを出力の後、longer_wordに入力された文字列を、shoeter_wordに空の文字を代入
{

printf("エラーです");

strcpy(longer_word,a);
strcpy(shoter_word,'/0');
}

else if() //2つの文字列が同じな場合に辞書的に後ろのものをlonger_wordに、前のものをshorter_wordに代入するプログラム

else if(strcmp(a,b)){ //文字列を比較し、長い文字列をlonger_wordに、短い文字列をshorter_wordへ代入

a>b;

strcpy(longer_word,a); strcpy(shorter_word,b);
}
else if(strcat(a,b)) //スペース区切りで結合したものを代入
{
combined_word=strcat(a,b);

else //それぞれの文字列の長さをlonger_wordおよびshorter_wordに代入

}


strcpy(longer_word,a); strcpy(shorter_word,b);


int main(void){

typedef struct word_pair
{
char longer_word[10]; //長い方の文字列
char shorter_word[10]; // 短い方の文字列
char combined[20]; //連結した文字列
int longer_word_length; //長い方の文字列の長さ
int shorter_word_length; //短い方の文字列の長さ
}word_pair_t;

char x[10],y[10];
printf("2つの文字を打ち込んでください。");
scanf("%s %s",x,y);




printf("連結したものは%sです",word_pair.combined[20])
return 0;

}

A 回答 (2件)

strcpy(shoter_word,'/0');


の第2引数は '\0' じゃなくて '/0' ですよ>#1.

と突っ込んでおいて, と.

プログラム中
if(strcmp(a,b)==0) //2つの文字が同じ場合はエラーメッセージを出力の後、longer_wordに入力された文字列を、shoeter_wordに空の文字を代入
の部分は「2つの文字」といっているが「どの文字とどの文字を比較しているのか」がわからない. このコメントが「2つの文字列」の間違いであるとすればプログラムの strcmp に合致するが, そうすると今度はその次の
else if() //2つの文字列が同じな場合に辞書的に後ろのものをlonger_wordに、前のものをshorter_wordに代入するプログラム
と同じ条件になるので論理的に矛盾する.
    • good
    • 0

ここだと2012年に同じようなネタが。


Web検索すると知恵袋で2010年に同じようなネタが。
そのまま検索すると2015年に回答らしきものをgithub.comに登録されている方も。

課題のコピペクリアの為には問題文の中から特徴的と思われる単語でWeb検索するのが勝ち組への第一歩ですよ(^_^)v
ちなみに今回は「create_word_pair」でWeb検索。

プログラマーと言われる職に就きたいなら、上記の勝ち組メソッドは最悪なパターンですけどね。
# 出題者がコピペ回答していないかチェックしている可能性もあるやも知れませんが、そんなのはこちらの知ったことではない。



>strcmp(a,b);

比較した結果を捨てているので無駄です。

>strcpy(shoter_word,'/0');

'\0'をコピー元のアドレスとして参照します。
恐らくヌルポアクセスでガッ!!です。
# つまりOSに殺されます。

>combined_word=strcat(a,b);

以前のココでの回答でも書きましたが、配列に連結結果をコピー出来ません。
# aに対して連結実行します。(というかコンパイルエラーでしょう)

>printf("連結したものは%sです",word_pair.combined[20])

バッファオーバーランです。
パディングがアドレスとして解釈されるか、longer_word_length辺りがアドレスと解釈され、
恐らくOSに殺されます。
    • good
    • 0

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