[英]Why is the last character “?” in this string function
我有以下字符串函數:
char * to_upper(const char * str) {
char * upper = malloc(strlen(str)+1);
int i;
for (i=0; str[i] != 0; i++)
upper[i] = toupper(str[i]);
upper[i+1] = '\0';
return upper;
}
但是,當我稱它為"?"
到最后(可能是無效字符)。 如果我將最后一行從upper[i+1] = '\\0'
更改為upper[i] = '\\0'
,那么它將按預期工作。 那么上面的代碼有什么問題呢?
另外,這是分配字符串的正確方法嗎?
char * upper = malloc(strlen(str)+1);
還是我應該這樣做:
char upper[strlen(str)+1];
更新 :我上面的錯誤是因為長度從1開始,索引從0開始。但是我應該如何初始化字符串?
您的代碼很好,您只需要刪除發現的+1
。 當str[i]
等於'\\0'
,for循環結束,因此也應該將upper[i]
設置為'\\0'
。
您的字符串初始化很好。
我固定了答案,並附有評論:
char * to_upper(const char * str) {
char* upper = malloc(strlen(str));
int i;
for (i=0; str[i] != '\0'; i++)
upper[i] = toupper(str[i]);
upper[i] = '\0';
return upper;
}
通過評論,我看到了我和您的邏輯中的錯誤。 空字符串已經存在,因此我們不在str[i] == '\\0'
的for范圍內。 因此,我們知道i
是我們需要在upper
設置為\\0
的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.