2

連結せずに 2 つの文字列を次々に格納する方法 (アドレスをインクリメントできます)

char str[10];
scanf("%s",str);
str=str+9;
scanf("%s",str);

注: ここで、最初の文字列を BALA として指定し、2 番目の文字列を HI として指定すると、 BALA の後に HI として出力されます。しかし、HI は BALA に取って代わるべきではありません。

4

4 に答える 4

2

あなたが何をしたいのかを正しく理解していれば、おそらく文字列を配列に入れたいと思うでしょう。したがって、コードの修正版は次のようになります

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 を定義する必要があります)

于 2013-05-13T07:51:12.623 に答える
0

アンワインドと同様の方向に進むと、%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;
于 2013-05-13T09:31:12.993 に答える