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