返回名称缩写的C程序(CS50)

Har*_*ian 0 c memory string char cs50

这是我的 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");
}
Run Code Online (Sandbox Code Playgroud)

该计划效果很好; 它通过了所有(check50)测试.

但我担心一个可能的错误,那就是i = 0,存储的值是否可能name[-1]是一个字母字符?

注意:该GetString()函数返回用户输入的字符串.

hac*_*cks 5

因为i = 0,name[i-1]正在访问未分配的内存,它将导致未定义的行为.改变循环计数器i = 1而不是i = 0.

如评论中所述,您需要检查i =0循环外的条件.