我需要將一個句子(例如「Hello world」)複製到字符串列表中,意思是每個2個字由'\0'
分隔的字符數組中。 請注意,單詞被定義爲沒有空格的行中的任意數量的字符。因此,無論何時我的程序檢測到任何數量的連續空白(包括只有一個空白),它都應該修改一個'\0'
而不是一個'\0'
。C - 將字符串(句子)轉換爲字符串列表
問題是在我的target
字符數組中第一次寫後,我無法再寫入它。我猜它是因爲'\0'
意味着字符串結束,但在我的情況下,我試圖在字符數組內實現一個字符串列表,所以我必須在每兩個單詞之間有'\0'
。
基本上我的問題是我怎麼countinue寫入字符數組後?
這裏是我到目前爲止的代碼(你可以看到我也是在每次迭代檢查足夠的空間在traget
但部分工作正常,那麼是不是真的野趣)
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策略是可行的,最後用兩個nullchar完成,但是你(這個東西的調用者)更好地理解這是該計劃。傳統上,*指針數組*用於構建字符串列表;不是一個字符緩衝區。 – WhozCraig