use*_*315 1 c stdin scanf segmentation-fault
道歉我对C非常缺乏经验.我有以下代码:
char * a[BUF_SIZE];
scanf("%d", numberOf);
do {
a[i] = (char *)malloc(MAX_LINE_LEN + 1);
scanf("%s", a[i]);
++i;
} while(i < numberOf);
Run Code Online (Sandbox Code Playgroud)
这个想法很简单,使用scanf从stdin读取两个输入,第一个是单个int,后面是一些字符串数组.Scanf在两种情况下都独立工作,例如scanf("%d",numberOf)将存储一个数字,scanf("%s",a [i])将一组字符串存储到数组中.但是,在读取一组字符串时,首先将整数读入numberOf会导致段错误.我的问题是为什么?我知道使用scanf通常是不好的做法,但是我没有看到如何从stdin中读取多个输入会导致生成的代码中出现段错误.非常感谢!
从代码来看,它看起来像是numberOf一个int.使用时scanf,你想传递一个指针,所以scanf("%d", numberOf);改为scanf("%d", &numberOf);
scanf用户输入的内容是什么,并将其放入第二个参数指定的内存地址中.当您提供int第二个参数时,scanf尝试将用户输入放入int它可能不拥有的内存地址(由其指定),从而导致seg-fault.