我在下面的代码中遇到了分段错误。
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]);
这里有什么想法吗?请帮助.. :(
答案 0 :(得分:0)
您的代码中至少有2个问题:
name
作业:name = Getstring();
name
是一个字符数组,您不能只为它分配一个值,例如int
。您应该使用类似strcpy()
的内容将新字符串复制到其中。这样,name
将包含一个有意义的字符串,您可以使用strlen()
,initials[j] = toupper(name[i]);
name
的首字母不能超过10
(因此,j
可能总是< 10
。但是,你应该总是把极端情况考虑在内考虑以保护您的程序免受(邪恶的)用户输入。请尝试在循环中使用此条件:while(i < size && j < 10)