連結せずに 2 つの文字列を次々に格納する方法 (アドレスをインクリメントできます)
char str[10];
scanf("%s",str);
str=str+9;
scanf("%s",str);
注: ここで、最初の文字列を BALA として指定し、2 番目の文字列を HI として指定すると、 BALA の後に HI として出力されます。しかし、HI は BALA に取って代わるべきではありません。
あなたが何をしたいのかを正しく理解していれば、おそらく文字列を配列に入れたいと思うでしょう。したがって、コードの修正版は次のようになります
char strings[ARRAY_LENGTH][MAX_STRING_LENGTH];
char* str = strings[0];
scanf("%s",str);
str=strings[1];
scanf("%s",str);
次に、すべての文字列を出力するには、次のように配列をループする必要があります
int i;
for(i = 0; i < ARRAY_LENGTH; i++)
{
printf(strings[i]);
}
(ARRAY_LENGTH と MAX_STRING_LENGTH を定義する必要があります)
アンワインドと同様の方向に進むと、%n
ディレクティブを使用して、読み取られたバイト数を判断できます。先頭の空白を削除することを忘れないでください。scanf に関するマニュアルを非常に注意深く読むこともできますが、「戻り値」セクションには特に注意してください。戻り値の処理は、文字列が実際に読み取られたことを確認し、未定義の動作を回避するために必要です。
char str[64];
int whitespace_length, str_length, total_length;
/* NOTE: Don't handle errors with assert!
* You should replace this with proper error handling */
assert(scanf(" %n%s%n", &whitespace_length, str, &total_length) == 1);
str_length = total_length - str_length;
assert(scanf(" %n%s%n", &whitespace_length, str + str_length, &total_length) == 1);
str_length += total_length - str_length;