質問編集履歴

4

解決後のコードを追加しました。

2020/03/09 05:41

投稿

aya0
aya0

スコア16

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  ```
66
66
 
67
- **解決後のコード**
67
+ **解決後のコード1**
68
68
 
69
69
  ```c
70
70
 
@@ -121,3 +121,59 @@
121
121
  }
122
122
 
123
123
  ```
124
+
125
+
126
+
127
+ **解決後のコード2**
128
+
129
+ ```
130
+
131
+ #define _CRT_SECURE_NO_WARNINGS
132
+
133
+ #include <stdio.h>
134
+
135
+ #include <ctype.h>
136
+
137
+
138
+
139
+ void a(char *s)
140
+
141
+ {
142
+
143
+ while (*s) {
144
+
145
+ *s = *(s + 1);
146
+
147
+ s++;
148
+
149
+ }
150
+
151
+ }
152
+
153
+
154
+
155
+ int main(void)
156
+
157
+ {
158
+
159
+ char str[128];
160
+
161
+
162
+
163
+ printf("文字列を入力してください\n");
164
+
165
+ scanf("%s", str);
166
+
167
+
168
+
169
+ a(str);
170
+
171
+ printf("%s", str);
172
+
173
+
174
+
175
+ return 0;
176
+
177
+ }
178
+
179
+ ```

3

解決後のコードを追加しました。

2020/03/09 05:41

投稿

aya0
aya0

スコア16

test CHANGED
File without changes
test CHANGED
@@ -63,3 +63,61 @@
63
63
  }
64
64
 
65
65
  ```
66
+
67
+ **解決後のコード**
68
+
69
+ ```c
70
+
71
+ #define _CRT_SECURE_NO_WARNINGS
72
+
73
+ #include <stdio.h>
74
+
75
+ #include <ctype.h>
76
+
77
+
78
+
79
+ char * a(char *s)
80
+
81
+ {
82
+
83
+ char *t = s;
84
+
85
+ while (*s) {
86
+
87
+ *s = *(s + 1);
88
+
89
+ s++;
90
+
91
+ }
92
+
93
+
94
+
95
+ return t;
96
+
97
+ }
98
+
99
+
100
+
101
+ int main(void)
102
+
103
+ {
104
+
105
+ char str[128];
106
+
107
+
108
+
109
+ printf("文字列を入力してください\n");
110
+
111
+ scanf("%s", str);
112
+
113
+
114
+
115
+ printf("%s", a(str));
116
+
117
+
118
+
119
+ return 0;
120
+
121
+ }
122
+
123
+ ```

2

修正

2020/03/09 05:17

投稿

aya0
aya0

スコア16

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,7 @@
1
+ (追記:最初、バグの関係で修正される前の質問が掲示されてしまいました。本当に申し訳ありません。)
2
+
3
+
4
+
1
5
  文字列を1文字左にシフトするプログラムを作りたかったのですが、下記のようにコードを記述したところ、変更後の文字列が表示されないまま終了しました。
2
6
 
3
7
  その理由が知りたいです。

1

修正

2020/03/09 04:08

投稿

aya0
aya0

スコア16

test CHANGED
@@ -1 +1 @@
1
- c言語 なぜ*s = *s++;しても1文字左にシフトされないのか
1
+ c言語 なぜs(仮引数であるポインタ変数)を変更してsを返却値することができないのか
test CHANGED
@@ -1,6 +1,4 @@
1
- 文字列を1文字左にシフトするプログラムを作りたかったのですが、下記のようにコードを記述したところ、受け取った文字列をそのままているだけの、コードになってしいました。
1
+ 文字列を1文字左にシフトするプログラムを作りたかったのですが、下記のようにコードを記述したところ、変更後の文字列が表示されないまま終了しました。
2
-
3
- sはポインタ変数なので、s
4
2
 
5
3
  その理由が知りたいです。
6
4
 
@@ -18,11 +16,21 @@
18
16
 
19
17
 
20
18
 
21
- void a(char *s)
19
+ char * a(char *s)
22
20
 
23
21
  {
24
22
 
23
+ while (*s) {
24
+
25
- s = s + 1;
25
+ *s = *(s + 1);
26
+
27
+ s++;
28
+
29
+ }
30
+
31
+
32
+
33
+ return s;
26
34
 
27
35
  }
28
36
 
@@ -32,23 +40,21 @@
32
40
 
33
41
  {
34
42
 
35
- char str[128];
43
+ char str[128];
36
44
 
37
45
 
38
46
 
39
- printf("文字列を入力してください\n");
47
+ printf("文字列を入力してください\n");
40
48
 
41
- scanf("%s", str);
49
+ scanf("%s", str);
42
50
 
43
51
 
44
52
 
45
- a(str);
46
-
47
- printf("%s", str);
53
+ printf("%s", a(str));
48
54
 
49
55
 
50
56
 
51
- return 0;
57
+ return 0;
52
58
 
53
59
  }
54
60