簡體   English   中英

為什么此字符串函數中的最后一個字符為“?”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM