我想要做的是遍歷報價直到引用結尾/(*引號沒有任何內容)。我的代碼有效嗎?如何遍歷指針所創建的字符串
char *quote = "To be or not to be, that is the question.";
for (quote = 0; *quote != NULL; quote++){
*quote = tolower(*quote);
}
我想要做的是遍歷報價直到引用結尾/(*引號沒有任何內容)。我的代碼有效嗎?如何遍歷指針所創建的字符串
char *quote = "To be or not to be, that is the question.";
for (quote = 0; *quote != NULL; quote++){
*quote = tolower(*quote);
}
您可能需要另一個指針來遍歷數組,否則對原始字符串的訪問將會丟失。
並且最好只使用NULL
作爲指針。
請不要使用0
作爲初始值,除非您想要使用索引(請參見下文)。
做char *quote =
只會讓quote
指向只讀文字,而不是複製字符串。改爲使用char quote[] =
。
char quote[] = "To be or not to be, that is the question.";
char *quotePtr;
for (quotePtr = quote; *quotePtr != '\0'; quotePtr++){
*quotePtr = tolower(*quotePtr);
}
Test。
使用指數:
char quote[] = "To be or not to be, that is the question.";
int i;
for (i = 0; quote[i] != '\0'; i++){
quote[i] = tolower(quote[i]);
}
Test。
你在你的for
初始化,這是無效的,因爲你在*quote != NULL
部分提領它會導致訪問衝突重新分配quote
。
語義上NULL
和'\0'
是等價的,但語法上我更喜歡這個。請注意,通過使用這種方法,您可以保留一個指向字符串(的開頭)的指針。
wchar const_t* quote = L"To be or not to be, that is the question.";
for(wchar_t* c = quote; *c != '\0'; c++) {
*c = tolower(*c);
}
替代地使用索引:
wchar const_t quote[] = L"To be or not to be, that is the question.";
for(size_t i = 0; i < sizeof(quote); i++) {
quote[i] = tolower(quote[i]);
}
(注意,如果quote
值不是在編譯時已知的sizeof
語義將改變)
考慮此作爲擴展到由Dukeling提供的答案
當您使用
char *quote = "Hello World";
這使得只讀字符串,意味着您不能以更簡單的方式更改其內容。
Here *quote points to 'H'
BUT, you cannot do *quote = 'A';
This will give you an error.
如果您想更改字符串中的字符,使用數組是一個好習慣。
char quote[] = "Hello World";
Here also *quote points to 'H'
BUT, in this case *quote = 'A' is perfectly valid.
The array quote will get changed.
要切入點,'quote = 0'是不正確的。 – Zong
爲什麼不使用'unsigned int'? – Recker