CS50 pset2,获取名称的首字母

时间:2015-11-01 11:45:45

标签: c segmentation-fault cs50

我在下面的代码中遇到了分段错误。

char name[30];
char initials[10];
int i=0, j=0;
int size;

printf("Getting name: ");
name = Getstring();
size = strlen(name);

while(i < size)
{
    if(i == 0)
    {
         initials[j] = toupper(name[i]);
         j++;
    }
    else
    {
         if(name[i - 1] == ' ')
         {
              initials[j] = toupper(name[i]);
              j++;
         }
    }
    i++;
}
initials[j] = '\0';
printf("%s",initials);
    }
}

当我调试它时(通过cs50设备中的gdb),我在此声明中发现了错误:     姓名缩写[j] = toupper(姓名[i]);

这里有什么想法吗?请帮助.. :(

1 个答案:

答案 0 :(得分:0)

您的代码中至少有2个问题:

  1. name作业:name = Getstring();
    name是一个字符数组,您不能只为它分配一个值,例如int。您应该使用类似strcpy()的内容将新字符串复制到其中。这样,name将包含一个有意义的字符串,您可以使用strlen()
  2. 字符分配:initials[j] = toupper(name[i]);
    我认为你假设name的首字母不能超过10(因此,j可能总是< 10。但是,你应该总是把极端情况考虑在内考虑以保护您的程序免受(邪恶的)用户输入。请尝试在循环中使用此条件:while(i < size && j < 10)