我有一個程序,我想從一個字符串中刪除空格。我想找到一個優雅的方式來做到這一點,所以我發現下面的(我已經改變了它一點,所以它可能是更好的可讀)代碼in a forum:C如何知道我的字符串的結尾?
char* line_remove_spaces (char* line)
{
char *non_spaced = line;
int i;
int j = 0;
for (i = 0; i <= strlen(line); i++)
{
if (line[i] != ' ')
{
non_spaced[j] = line[i];
j++;
}
}
return non_spaced;
}
正如你可以看到,該函數採用字符串,並使用相同的分配的內存空間,只選擇無間隔字符。有用!
無論如何,根據維基百科,在C的字符串是「Null-terminated string」。我一直認爲這樣,一切都很好。但問題是:我們把沒有「空字符」在non_spaced
字符串的結尾。並以某種方式編譯器知道它的最後一個字符用「non_spaced」串改結束。它如何知道?
你是什麼意思「編譯器知道它」?你在運行時改變它,編譯過程是long已過 – Fred 2012-04-27 11:34:46
@Fred - 好點! – 2012-04-27 11:36:14
對於它的價值,'strlen(line)'會重新計算字符串的長度時間。這是一個非平凡的計算,不應該在每個循環迭代中完成。你會更好地計算一次並存儲它:'size_t len = strlen(line); for(i = 0; i <= len; i ++)'。 (另外,你所有作爲int的變量在技術上應該是'size_t'類型。) – 2012-04-27 11:38:38