繁体   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