【发布时间】:2016-04-02 12:03:23
【问题描述】:
这是我的main
char* name = GetString();
if(name != NULL)
{
for(int i = 0, j = strlen(name); i < j; i++)
{
if(!isalpha(name[i-1]) && isalpha(name[i]))
printf("%c", toupper(name[i]));
}
printf("\n");
}
该程序运行良好;它通过了所有 (check50) 测试。
但我担心一个可能的错误,那就是i = 0,存储在name[-1] 中的值可以是字母字符吗?
注意:GetString() 函数返回用户输入的字符串。
【问题讨论】:
-
name[i-1]- 当 i 为零时这是可疑的 -
请参阅stackoverflow.com/questions/15646973/…,详细解释为什么访问不属于您的内存是错误的。
-
GetString函数是否保证第一个字符之前的字符是可访问的而不是字母数字的?如果是这样,这段代码很好。如果不是,则此代码已损坏。 -
@David Schwartz Nop,它没有。
-
您可以使用
if ((i == 0 || !isalpha(name[i-1])) && isalpha(name[i]))作为循环中的条件。