質問2

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Yuhiwa
記事: 11
登録日時: 2年前

質問2

#1

投稿記事 by Yuhiwa » 2年前

またまたわからない箇所が出てきましたので、

教えていただけると幸いです。

コード:

#include<stdio.h>
#define SIZE 100

unsigned str_copy(const char *ptsr1,const char *pstr2);

int main(void){
	char str1[SIZE];
	char str2[SIZE];
	
	printf("文字列の入力>"); scanf("%s",str1);
	
	str_copy(str1,str2);
	
	printf("str1 : %s\n",str1);
	printf("str2 : %s\n",str2);
	
	
	return 0;
}

void str_copy(int pstr1,int pstr2){
	
	do{
		
		pstr1=pstr2;
		pstr2++;
	}while(pstr1=pstr2);
}
コンパイルすると、エラーが出ます。
-----------------------------------------------
ex2201.c:24:6: error: conflicting types for 'str_copy'
void str_copy(int pstr1,int pstr2){
^
ex2201.c:7:10: note: previous declaration is here
unsigned str_copy(const char *ptsr1,const char *pstr2);
^
ex2201.c:30:14: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
}while(pstr1=pstr2);
~~~~~^~~~~~
ex2201.c:30:14: note: place parentheses around the assignment to silence this warning
}while(pstr1=pstr2);
^
( )
ex2201.c:30:14: note: use '==' to turn this assignment into an equality comparison
}while(pstr1=pstr2);
^
==
1 warning and 1 error generated.

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

Re: 質問2

#2

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

・宣言と定義でstr_copyの型が違う
・初期化していない配列str2の要素の値を使おうとしている
・constが付いたポインタの指すものを書き換えようとしている
・pstr1の指す位置を動かそうとしていない
・必ず2要素以上コピーするため、コピー元に空文字列を渡すと誤動作する

という問題がありますね。

↓ 修正版

コード:

#include<stdio.h>
#define SIZE 100

unsigned str_copy(char *pstr1,const char *pstr2);

int main(void){
	char str1[SIZE];
	char str2[SIZE];
	
	printf("文字列の入力>"); scanf("%s",str1);
	
	str_copy(str2,str1);
	
	printf("str1 : %s\n",str1);
	printf("str2 : %s\n",str2);
	
	
	return 0;
}

unsigned str_copy(char *pstr1,const char *pstr2){
	
	while((*pstr1=*pstr2)){
		pstr1++;
		pstr2++;
	}
	return 0;
}
オフトピック
長過ぎる入力を与えるとスタック上のデータを破壊する可能性が高く危険という問題もあるが…
入力が長過ぎなければいいし改善は若干難しそうなので、一旦スルー。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Yuhiwa
記事: 11
登録日時: 2年前

Re: 質問2

#3

投稿記事 by Yuhiwa » 2年前

ありがとうございます!
ついでにこれもいいでしょうか?

コード:

/*
21EO0122 樋渡悠
*/
#include<stdio.h>
#define SIZE 100

int main(void){
	
	char str[SIZE]={'\0'};
	char kensaku[SIZE]={'\0'};
	int sum=0;
	int len=0;
	int i;
	
	printf("文字列を入力>"); scanf("%s",str);
	printf("検索する文字列を入力>"); scanf("%s",kensaku);
	while(str[len] !='\0'){  //文字数のカウント
		len++;
				while(kensaku[sum] !='\0'){
		sum++;
	}
}
	printf("文字列%sの中に%sは%u文字含まれています。\n",str,kensaku,sum);
	return 0;
}
文字列を走査して、ユーザが指定した文字を探してその文字が含まれている個数を返すプログラムですが、1もじしかでてきません。どうすればいいでしょうか?

box
記事: 2002
登録日時: 13年前

Re: 質問2

#4

投稿記事 by box » 2年前

ユーザが指定した文字を探してその文字が含まれている個数を返すプログラム
話題が全然違うので、別のトピックを作りましょう。
その際、タイトルは「質問」なんかではなく、投稿の内容を端的に示す具体的なものにしましょう。
他のトピックを見てみてください。

入力例と出力例をいくつか挙げてください。
何をしたいのかイマイチピンと来ません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Yuhiwa
記事: 11
登録日時: 2年前

Re: 質問2

#5

投稿記事 by Yuhiwa » 2年前

分かりました!

返信

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