我正在尝试逐行阅读maps
,但我收到错误核心segmentation fault
错误...有人可以就我的代码给我一些建议吗?我正在使用3.13.0-32-generic
int main()
{
char buf[512];
FILE *f;
sprintf(buf, "/proc/%d/maps", getpid());
f = fopen(buf, "rt");
while (fgets(buf, 512, f)) {
unsigned int from, to, pgoff, major, minor;
unsigned long ino;
char flags[4];
int ret = sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to, flags[0],flags[1],flags[2],flags[3], &pgoff, &major, &minor,ino);
if (ret != 10)
break;
}
}
答案 0 :(得分:3)
您需要将指针传递给flags
数组的成员,而不是直接传递它们,这同样适用于ino
参数:
sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to,
&flags[0], &flags[1], &flags[2], &flags[3],
&pgoff, &major, &minor, &ino);
或者,一次扫描所有字符:
sscanf(buf, "%x-%x %4c %x %x:%x %lu ", &from, &to,
flags, &pgoff, &major, &minor, &ino);
注意&
之前缺少的flags
,因为数组在传递给函数时会自动转换为指向其第一个元素的指针。
答案 1 :(得分:1)
在scanf调用中替换
flags[x]
通过
&flags[x]
{p>同样适用于ino
。