我正在尝试使用fgets
从stdin
获取一行,但我反复获取诊断“Segmentation fault(core dumped)”我认为是目的地不存在时的错误 - 这很奇怪,考虑到我正在分配Title
。
void getName(Song* songList, int globalCounter)
{
char Title[100];
printf("Title for deletion: ");
fgets(Title,100,stdin);
char *pos;
if ((pos=strchr(Title, '\n')) != NULL)
*pos = '\0';
if (isalpha(Title[0]))
Title[0] = toupper(Title[0]);
printf(Title);
remove_title(songList, globalCounter, Title);
}
答案 0 :(得分:2)
您在堆栈上分配Title
,这意味着它在getName
函数之外变为无效。您发布的代码不会出现此问题,但我认为您的实际代码会在Title
中的某处保存songList
以供日后使用。 (当seeng更新代码时排除了,但remove_title
函数内的失败并非不可能)
由于您未检查fgets
的返回值,如果未输入任何字符串,则在未初始化的变量上运行strchr
,可能会导致段错误。 (对于更新的代码仍然如此)
printf(Title)
是灾难的秘诀。如果Title
恰好包含%
个字符,printf
会尝试访问不存在的参数,并且可能会失败。请改用printf("%s", Title)
。