次のコードを見てください。
char chs[100] = "Hello World";
char token[100];
int pos = -1;
while((current = chs[++pos]) != '"'){
strcat(token, ¤t);
}
しかし、出力は次のとおりです。
H\001e\001l\001l\001o\001 \001W\001o\001r\001l\001d
何か案は?
未定義の動作があります
あなたcurrent
は宣言されていないので、初期化されていない文字だと思います。文字
current = chs[++pos])
を設定しますが、文字列にしstrcat(token, ¤t);
たいcurrent
ので、変数の後にいくつかのジャンクが保存されていますcurrent
。さらに分析するために、サンプルコードをさらに投稿してください
ところで'"'
、C が間違っているように見えます
strcat() は、入力として null で終わる文字列を必要とします。そのため、strcat(token, ¤t) は current のアドレスから読み取りを開始し、null が見つかるまで続けます。たまたま、current の後にメモリにあったのは "\001" だったので、strcat を実行するたびにそれがすべて token にコピーされました。
char current[] = "\0\0" を実行してから、current[0] = chs[++pos] で割り当てる必要があります。そうすれば、 current は常にそのヌル終端を持ちます。