1

次のコードを見てください。

char chs[100] = "Hello World";
char token[100];
int pos = -1;
while((current = chs[++pos]) != '"'){
      strcat(token, &current);
}

しかし、出力は次のとおりです。

H\001e\001l\001l\001o\001 \001W\001o\001r\001l\001d

何か案は?

4

3 に答える 3

2

未定義の動作があります

あなたcurrentは宣言されていないので、初期化されていない文字だと思います。文字 current = chs[++pos])を設定しますが、文字列にしstrcat(token, &current);たいcurrentので、変数の後にいくつかのジャンクが保存されていますcurrent。さらに分析するために、サンプルコードをさらに投稿してください

ところで'"'、C が間違っているように見えます

于 2013-05-26T02:08:59.790 に答える
2

strcat() は、入力として null で終わる文字列を必要とします。そのため、strcat(token, ¤t) は current のアドレスから読み取りを開始し、null が見つかるまで続けます。たまたま、current の後にメモリにあったのは "\001" だったので、strcat を実行するたびにそれがすべて token にコピーされました。

char current[] = "\0\0" を実行してから、current[0] = chs[++pos] で割り当てる必要があります。そうすれば、 current は常にそのヌル終端を持ちます。

于 2013-05-26T02:09:31.810 に答える