0

printf 関数を使用して、関数に渡されたポインターから文字列を出力しようとしています。

printf("%s\n", strng[1]);

strng は呼び出し元から渡されます。前にスペースがある文字列で、その空白を削除したいです。したがって、私は以下のコードを持っています。

for(i=0; i<slength -1; i++) {
    printf("%s\n", strng[1]);
    tstr[i] = strng[i+1];
    printf("%s\n", tstr);
}
tstr[slength] = 0;

アクセス違反エラーが発生し続け、その理由がわかりません。printf 行を取り出すと、コードを実行できますが、戻り文字列 tstr の末尾には常に余分な文字が含まれています。出力は次のようになります。

  bp185080
  9
 bªM
 bpM
 bp1
 bp18─
 bp185
 bp1850K
 bp18508
 bp185080=::=::\
 bp185080=

空白を取り除き、余分な文字を持たないようにするにはどうすればよいですか?

4

2 に答える 2

4

基本的に、文字をポインターとして使用しようとしています。strng[1]またはのいずれかに&strng[1]置き換えますstrng + 1

于 2013-06-28T15:02:29.190 に答える
1

ループには、printf に関するいくつかの問題があります。

for(i=0; i<slength -1; i++) {
    printf("%s\n", strng[1]);   // Prints a character with a format of a string,
                                // you may want to use %c here instead to print
                                // the second char, or strng+1 to print the
                                // string starting with the second character.
    tstr[i] = strng[i+1];
    printf("%s\n", tstr);       // Prints tstr before terminated with \0, which
                                // is undefined behaviour, may very well crash.
}
tstr[slength] = 0;

また、最後の文字を処理するには 1 つの反復をループしているように見えますが、おそらくやりたいと思うでしょうfor(i=0; i<slength; i++)

于 2013-06-28T15:05:00.897 に答える