#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define WORD_MAX (10)
int main(void){
int i;
int word_string;
char data_in[WORD_MAX];
char data_out[WORD_MAX];
char *pdata_in;
char *pdata_out;
int j;
int word_string2;
char data_in2[WORD_MAX];
char data_out2[WORD_MAX];
char *pdata_in2;
char *pdata_out2;
printf("%d文字以内で文字列(姓)を入力してください。\n", WORD_MAX);
while(1){
scanf("%s", &data_in);
rewind(stdin);
word_string = strlen(data_in);
printf("入力した文字列(姓)は%dです。\n", word_string);
if (word_string <= WORD_MAX) break;
printf("もう一度入力してください\n");
}
printf("============================================================\n");
pdata_in = &data_in[word_string - 1];
pdata_out = &data_out[0];
for (i = 0; i<word_string; i++)
{
*pdata_out = *pdata_in;
pdata_in--;
pdata_out++;
}
*pdata_out = '\0';
printf("%d文字以内で文字列(名)を入力してください。\n", WORD_MAX);
while(1){
scanf("%s", &data_in2);
rewind(stdin);
word_string2 = strlen(data_in2);
printf("入力した文字列(名)は%dです。\n", word_string2);
if (word_string2 <= WORD_MAX) break;
printf("もう一度入力してください\n");
}
printf("============================================================\n");
pdata_in2 = &data_in2[word_string2 - 1];
pdata_out2 = &data_out2[0];
for (j = 0; j<word_string2; j++)
{
*pdata_out2 = *pdata_in2;
pdata_in2--;
pdata_out2++;
}
*pdata_out2 = '\0';
printf("入力した文字列(姓):%s\n", data_in);
printf("反転した文字列(姓):%s\n", data_out);
printf("入力した文字列(名):%s\n", data_in2);
printf("反転した文字列(名):%s\n", data_out2);
strcat(data_in, data_in2);
strcat(data_out, data_out2);
printf("入力した文字列連結:%s\n", data_in,data_in2);
printf("反転した文字列連結:%s\n", data_out,data_out2);
rewind(stdin);
getchar();
return 0;
}姓と名で10文字以上入力したらデバックでエラーが出るので修正してください。お願いします。
ポインタ 配列
Re: ポインタ 配列
WEBさんのコードとほぼ一致していますが、
WEBさんはscanfを(バッファオーバーランの危険があることおよび戻り値をチェックしていないことを除いて)正しく使用しているのに対し、
ぷちさんは余計な&を2箇所両方に入れる間違いを犯している、という点のみが異なりますね。
万が一同一人物であれば、名前の統一をお願いします。
WEBさんはscanfを(バッファオーバーランの危険があることおよび戻り値をチェックしていないことを除いて)正しく使用しているのに対し、
ぷちさんは余計な&を2箇所両方に入れる間違いを犯している、という点のみが異なりますね。
万が一同一人物であれば、名前の統一をお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ポインタ 配列
ぷち さんが書きました:姓と名で10文字以上入力したらデバックでエラーが出るので修正してください。お願いします。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define WORD_MAX (10)
void read_input(char *s){
int l = 0;
for(;;)
{
int input = getchar();
if (input == EOF) break;
if (isspace(input))
{
if (l > 0) break; else continue;
}
if (l <= WORD_MAX) s[l++] = input;
}
s[l] = '\0';
}
int main(void){
int i;
int word_string;
char data_in[WORD_MAX * 2 + 1];
char data_out[WORD_MAX * 2 + 1];
char *pdata_in;
char *pdata_out;
int j;
int word_string2;
char data_in2[WORD_MAX + 2];
char data_out2[WORD_MAX + 2];
char *pdata_in2;
char *pdata_out2;
printf("%d文字以内で文字列(姓)を入力してください。\n", WORD_MAX);
while(1){
read_input(data_in);
rewind(stdin);
word_string = strlen(data_in);
printf("入力した文字列(姓)は%dです。\n", word_string);
if (word_string <= WORD_MAX) break;
printf("もう一度入力してください\n");
}
printf("============================================================\n");
pdata_in = &data_in[word_string - 1];
pdata_out = &data_out[0];
for (i = 0; i<word_string; i++)
{
*pdata_out = *pdata_in;
pdata_in--;
pdata_out++;
}
*pdata_out = '\0';
printf("%d文字以内で文字列(名)を入力してください。\n", WORD_MAX);
while(1){
read_input(data_in2);
rewind(stdin);
word_string2 = strlen(data_in2);
printf("入力した文字列(名)は%dです。\n", word_string2);
if (word_string2 <= WORD_MAX) break;
printf("もう一度入力してください\n");
}
printf("============================================================\n");
pdata_in2 = &data_in2[word_string2 - 1];
pdata_out2 = &data_out2[0];
for (j = 0; j<word_string2; j++)
{
*pdata_out2 = *pdata_in2;
pdata_in2--;
pdata_out2++;
}
*pdata_out2 = '\0';
printf("入力した文字列(姓):%s\n", data_in);
printf("反転した文字列(姓):%s\n", data_out);
printf("入力した文字列(名):%s\n", data_in2);
printf("反転した文字列(名):%s\n", data_out2);
strcat(data_in, data_in2);
strcat(data_out, data_out2);
printf("入力した文字列連結:%s\n", data_in);
printf("反転した文字列連結:%s\n", data_out);
rewind(stdin);
getchar();
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)