所以我认为问题在于获取ref数组中的参考数字作为字符串并将其转换为整数以转换为整数数组结果,并将其复制到页面数组。由于我得到了分段错误11,我正在经历一个数组的界限。不知道如何解决这个问题。C程序给我分段错误11
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
char ref[30];// array that holds reference string
int frame_size;// maximum number of frames is 8
// a frame holds a number thats in the reference stream.
int optimal_fault =0;
int lru_fault =0;// least recently used faults
int mfu_fault =0;// most frequently used faults
int lfu_fault =0;// least frequently used faults
int pages = 0;//counts how many times you've looped
//int page=0;//this will be the pages array
printf(" Please enter reference string: ");
fgets(ref, 30, stdin);
int num;
//printf("reference: %c", &ref);
printf(" Please enter the number of frames(no more than 8 allowed)\n");
scanf("%d",&frame_size);
int len = strlen(ref);
int results[len];
int page[len];
int k=0;
printf("len: %d:",len);
for(int i=0; ref[i]!= '\0'; i++)
{
if(isdigit(ref[i]))
{
num = sscanf(&ref[i], "%d", &results[i]);
printf("results: %d\n", results[i]);
page[k] = results[i];
printf("page: %d\n", page[k]);
k++;
i++;
}
}
return 0;
}
你正在循环体内再次增加'i ++'*两次*,一次在'for'语句中。如果字符串长度是奇数,那么你会错过控制循环的''\ 0''终止符。 –
没有这不是问题的第二个i ++是那里的参考字符串格式。因为它可以是1 2 3 23,如果我把i ++取出来,它不会看到23它会看到1 2 3 2 3 @WeatherVane –
如果你遇到了分段错误,用Valgrind或Dr. Memory运行它。这两个程序都会告诉你哪行代码非法访问内存。 –