【发布时间】:2020-11-17 12:24:28
【问题描述】:
const char* CAPITALIZE(string val)
{
char valCap[strlen(val)];
for (int i = 0; i < strlen(val); i++)
{
char n = val[i];
if (n >= 'a' && n <= 'z')
{
n -= 32;
valCap[i] = n;
}
else
{
valCap[i] = n;
}
}
valCap[strlen(val) + 1] = '\0';
return valCap;
}
这应该做的是:
- 输入一个字符串。
- 将其中的所有字母大写。
- 返回字符串。
但它不起作用。我尝试寻找解决方案,但似乎没有任何效果。
【问题讨论】:
-
这不起作用,因为 a)
char valCap[strlen(val)];不允许字符串终止符,并且 b) 从函数返回后它不会存在。 -
string = const char*?
-
选项是 a) 为新字符串分配动态内存,b) 将新字符串的缓冲区作为另一个参数传递,c) 原地大写字符串。
-
...即使您有额外的终止符字节,
valCap[strlen(val) + 1] = '\0';仍然是错误的(1 太远了)。 -
我发现考虑非常短的字符串来可视化这些东西很有帮助,比如长度 0 或 1。