文字列に文字を1つずつ追加しようとしています。私はこのようなものがあります:Cビルド文字列charで既知の最大長を持つ文字
void doline(char *line, char *buffer, char** tokens){
}
をし、私は好き、それを呼び出しています:
char *line = malloc(1025 * sizeof(char *));
fgets(line, 1024, stdin);
int linelength = strlen(line);
if (line[linelength - 1] == '\n'){
line[linelength - 1] = '\0';
}
char ** tokens = (char **) malloc(strlen(line) * sizeof(char *));
char *emptybuffer = malloc(strlen(line) * sizeof(char *));
parseline(line, emptybuffer, tokens);
だから、ドリーネはトークンに様々な条件とその場所の断片に基づいてラインを通過し、それをトークン化します。変数バッファーにtemp文字列を作成しています。これを行うには、行を1文字ずつ実行する必要があります。
buffer[strlen(buffer)] = line[i];
そして、ループの終わりに:
私は現在やっている。しかし
*buffer++ = '\0';
これが結果です:
printf("Working on line: '%s' %d\n", line, strlen(line));
出力:ライン上での作業: 'テスト' 4
しかし、関数の最後でバッファがされていますので、出力文字列が台無しになっていることを示している「テスト」7
:
*buffer++ = '\0';
printf("Buffer at the very end: '%s' %d\n", buffer, strlen(buffer));
出力:非常に最後のバッファー。キャラクターごとにこの文字列を作成する最良の方法は何ですか?私の弦の操作は正しいですか?
任意の助けもいただければ幸いです!
ありがとうございます!
'strlen()'は、終了する '\ 0'が存在する場合にのみ動作します。終了文字列に文字を追加するためにそれを使用しようとすると(または終端文字を追加すると!)、終わりを近づけるでしょう。 – geekosaur
ああ、それは賢明です。私はインデックスとしてstrlenを利用できない場合、これを行うための最良の方法は何ですか? – Rila
私は何のインデックスの内部カウントを維持しようとすることができます。私はこれを試してみましょう! – Rila