"Hello world"などの文章を文字列リストにコピーする必要があります。つまり、2ワードごとに'\0'
で区切られた文字配列にコピーする必要があります。 wordは、行内の任意の文字数として空白なしで定義されていることに注意してください。C - 文字列(文)を文字列リストに変換する
私のプログラムが行内の空白(1つの空白のみを含む)を検出すると、代わりに'\0'
の1つを使用する必要があります。
問題は、私のtarget
文字配列に初めて'\0'
を書き込んだ後、もう書き込めません。私はそれが'\0'
の文字列の終わりを意味するので私の推測ですが、私の場合は、文字配列内の文字列リストを実装しようとしているので、すべての2単語の間に'\0'
を持っている必要があります。
基本的に私の質問は、'\0'
を入れた後にchar配列に書き込むことができますか?ここで
これまでの私のコードです(私はまた、すべての反復でtraget
に十分なスペースをチェックしますが、その部分はそう本当にのinterstingされていない正常に動作します見ることができるように)
int strListFromWords(const char* source, char* target, int buffSize)
{
if (buffSize < 2) return -1;
char* sCurrentPointer = source;
char* tCurrentPointer = target;
int charsInTarget = 0;
while (*sCurrentPointer != '\0') // While not end of string
{
if (charsInTarget + 2 < buffSize) // if there is enough space in target for current char
{
charsInTarget++;
if (!isspace(*sCurrentPointer)) // if current char isn't space
{
*tCurrentPointer = *sCurrentPointer;
sCurrentPointer++;
tCurrentPointer++;
}
else
{
*tCurrentPointer = '\0'; // PROBLEMATIC LINE put '\0' instead of spcace (in target)
sCurrentPointer++; // goto next char in source
tCurrentPointer++; // goto next position in target
while (isspace(*sCurrentPointer)) // while there are more spaces in a row
{
sCurrentPointer++; // just skip them without messing with target
}
}
}
else
{ // Not enough space
emptyStrList(target);
return 0;
}
}
*tCurrentPointer = '\0';
*(tCurrentPointer + 1) = '\0';
return numStrsInList(target);
}
ありがとう、
[ 'はstrtok()'](http://pubs.opengroup.org/onlinepubs/ 9699919799/functions/strtok.html)があなたのしていることをしてくれます。あなたは学習目的のために「輪を再発明する」必要があります。 – pmg
@pmgこれはちょうど私の目的です – Noam
これを行う方法を習得する前に、おそらくあなた自身がこの質問をしてください:あなたはどのように**単一のターゲットで構成されている "文字列リスト" char'バッファ?埋め込まれたnullchar戦略を使用して、最終的に2つのnullcharsで仕上げることは実現可能ですが、あなた(このことを呼び出す者)はそれが計画であることをよく理解していました。伝統的に、*ポインタの配列*は文字列のリストを作成するために使用されます。単一のcharバッファではありません。 – WhozCraig